0
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)

但没有运气。

4

2 回答 2

2

使用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。

于 2012-09-18T17:09:09.140 回答
0

我相信这可以解决您的问题。

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
于 2012-09-18T17:32:11.077 回答