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 に答える