我有这个存储过程
create proc getVersion(@appCode nvarchar(128), @serialNo nvarchar(128))
as
select v.Version from Version v
inner join Application a on a.Code = v.AppCode
inner join SerialNumber s on a.Code = s.AppCode
where a.Code = @appCode and s.SerialNo = @serialNo
这个过程必须返回一个结果集。 我在 qt 中这样调用它:
QStringList DBConnection::getQueryResult(QString code, QString serialNo){
connect();
QSqlQuery query;
QStringList results;
query.prepare("CALL getVersion(?,?)");
query.bindValue(1,code);
query.bindValue(2,serialNo);
query.exec();
while(query.next()){
QString result = query.record().value(1).toString();
results.append(result);
}
for(QString res:results){
qDebug() << res;
}
closeConnection();
return results;
}
但我收到以下错误:“@P1”附近的语法错误不正确。无法准备 SQL Server 语句。
在 Qt 中调用带有 2 个输入参数的存储过程的正确方法是什么?
编辑:
我创建了一个函数,它将返回一个包含匹配数据的表。
create function getAppVersions
(
@appCode nvarchar(128),
@serialNo nvarchar(128))
returns table as
return (
select v.Version from Version v
inner join Application a on a.Code = v.AppCode
inner join SerialNumber s on a.Code = s.AppCode
where a.Code = @appCode and s.SerialNo = @serialNo)
我不知道如何使用 QSqlQuery 调用这个函数。
最佳答案
问题是这样解决的:
我创建了函数:
create function getAppVersions
(
@appCode nvarchar(128),
@serialNo nvarchar(128))
returns table as
return (
select v.Version from Version v
inner join Application a on a.Code = v.AppCode
inner join SerialNumber s on a.Code = s.AppCode
where a.Code = @appCode and s.SerialNo = @serialNo
)
然后像这样在 Qt 中调用该函数:
QStringList DBConnection::getQueryResult(QString code, QString serialNo){
QSqlQuery query;
QStringList results;
QString connectionString = connection.arg(serverName).arg(dbName);
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName(connectionString);
if (db.open())
{
qDebug() << "Opened";
query = db.exec("Select *from getAppVersions('" + code + "','" + serialNo + "');");
while(query.next()){
QString result = query.record().value(0).toString();
results.append(result);
}
db.close();
}
else
{
qDebug() << "Error = " << db.lastError().text();
}
db.close();
return results;
}
关于sql-server - Qt中如何调用带入参的sql server存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23960566/