DECLARE @command = 'SELECT CASE WHEN ( SELECT COUNT(*)
FROM [table] WITH ( NOLOCK )
WHERE DATEDIFF(minute, systemupdatedtimestamp, GETDATE()) < 10
) > 0 THEN 0
ELSE 1
END'
现在我需要获取上述命令的"返回值"(0 或 1)。
EXEC(@commnad)
如何从上面获取返回值?
我试过了
SET @ReturnValue = EXEC(@command)
但没有运气。
使用sp_executesql
在您的情况下,它是这样的:
declare @myOut bit
declare @SQLString nvarchar(500)
set @SQLString = N'SELECT @myOutValue = CASE WHEN ( SELECT COUNT(*)
FROM [table] WITH ( NOLOCK )
WHERE DATEDIFF(minute, systemupdatedtimestamp, GETDATE()) < 10
) > 0 THEN 0
ELSE 1
END'
declare @ParmDefinition nvarchar(500)
set @ParmDefinition = N'@myOutValue bit OUTPUT'
EXECUTE sp_executesql @SQLString, @ParmDefinition, @myOutValue = @myOut OUTPUT
select @myOut
更新:
跟进您的评论。如果您不想修改包含sql命令的原始字符串(例如,它在其他地方使用等),则可以将该命令包装在新字符串中,如下所示:
@SQLString = 'select @myOutValue = (' + @yourOrigSqlCommand + ')'
并以与上述相同的方式调用sp_executesql。
我相信
这可以解决你的问题。
DECLARE @command nvarchar(max) = 'SELECT CASE WHEN ( SELECT COUNT(*)
FROM [table] WITH ( NOLOCK )
WHERE DATEDIFF(minute, systemupdatedtimestamp, GETDATE()) < 10
) > 0 THEN 0
ELSE 1
END'
exec sp_executesql @command