我有一个返回整数的函数。我无法想象如何在Qt中调用这个函数。
create function isLastAppVersion(
@currentVersion nvarchar(10),
@appCode nvarchar(128),
@serial nvarchar(128))
returns int
as
begin
declare @ret int
select @ret = case
when @currentVersion = (select *from getAppLastVersion(@appCode,@serial))
then 1 else 0 end
return @ret
end
从Sql server我称之为:
declare @i int
exec @i = dbo.isLastAppVersion @currentVersion = '2.1',@appCode = '33fdd5f4-e24b-11e3-a375-82687f4fc15c',@serial='14jt-cf3c-24b1-c1e3'
print @i
如何从Qt执行此操作? 这是我试过的。但它不起作用
QString DBConnection::isLastVersion(QString version, QString appCode, QString serialNo){
QSqlQuery query;
QString result;
QString connectionString = connection.arg(serverName).arg(dbName);
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName(connectionString);
if (db.open())
{
qDebug() << "Opened";
query = db.exec("isLastAppVersion('" + version + "','" + appCode + "','" + serialNo + "');");
while(query.next()){
result = query.record().value(0).toString();
qDebug() << "Result la functie is last version: " << result;
}
db.close();
}
else
{
qDebug() << "Error = " << db.lastError().text();
}
db.close();
return result;
}
答案 0 :(得分:1)
因为它是一个函数,它将通过SELECT语句调用,就像你调用任何sql server的内置函数一样(GETDATE(),SUM(),COUNT())
在你的情况下,它会像......
SELECT dbo.isLastAppVersion('2.1'
,'33fdd5f4-e24b-11e3-a375-82687f4fc15c'
,'14jt-cf3c-24b1-c1e3')
或者,如果您想将返回的值存储到变量中,只需执行此操作...
declare @i int;
SELECT @i = dbo.isLastAppVersion('2.1'
,'33fdd5f4-e24b-11e3-a375-82687f4fc15c'
,'14jt-cf3c-24b1-c1e3')
PRINT @i
注意强>
同样在您的函数定义中,您有以下行
when @currentVersion = (select *from getAppLastVersion(@appCode,@serial))
我相信getAppLastVersion是另一个表值函数。如果此函数返回多列,则需要从此select语句中选择一个Only One列。此外,如果此函数有可能返回多行,请确保在Select语句中也使用TOP 1
子句,因为您要将此函数返回的结果与标量值进行比较。
因此,您需要确保此函数在调用时返回Single值,并将单个值与@currentVersion
变量进行比较。