如何从 CASE 语句中获取作为动态 SQL 查询的返回值


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

最新更新