0

出力について愚かな質問があります。テーブルにレコードがあるかどうかを確認するために内部で動的 SQL を実行しているストアド プロシージャがあります。これは例です。

SET @sqlLog = 
    'SELECT 1 FROM MyTable 
      WHERE TableName = ''' + @TableName + '''' + '
        AND TheKey = ''' + convert(varchar(50), @LoadGuid) + ''''                                    
EXEC(@sqlLog)

その後、 @@RowCount を使用して、結果が 0 かどうかを検証しています。

問題は、WHILE 内にあり、各行が SQL Management Studio の出力ウィンドウに結果を表示していることです。これは本当に必要ありません。何か案が?ありがとうございました!

4

5 に答える 5

0

NOCOUNTオプションを使用する必要があると思います。

SET NOCOUNT ON

詳細については、 http://msdn.microsoft.com/en-us/library/ms189837.aspxを参照してください。

幸運を、

デイブ・チェルカスキー

于 2012-10-01T16:17:54.137 に答える
0

そのようなストレートセレクトステートメントの結果を抑制させる方法はありません。あなたは文字通り、それらの結果を呼び出し元のアプリケーション、ここではSSMSに返すように指示しており、そうしています。SSMSはこれらの結果を適切に表示しています。それらをどのように表示するか(結果ペインまたはテキストなど)に関していくつかのオプションがありますが、SSMSでそれをオフにするオプションを知りません。

できることは、出力パラメーターでsp_executesqlを使用することです。これにより、結果を要求する代わりに、行数をパラメーターに入れるだけで済みます。これは次のようになります。

declare @theCount int

SET @sqlLog =       'SELECT @theCount = count(*)  
  FROM MyTable         
  WHERE TableName = ''' + @TableName + '''' + 
  '          AND TheKey = ''' + convert(varchar(50), @LoadGuid) + ''''            

EXEC sp_executesql @sqlLog, N'@theCount int OUTPUT', @theCount=@theCount OUTPUT 

次に、@theCountの値が@@Rowcountではなく0であるかどうかを確認します。

于 2012-10-01T16:40:50.980 に答える
0

なぜこれに動的SQLが必要なのですか?次のようなことができます:

IF EXISTS ( SELECT 1 FROM MyTable 
            WHERE TableName = @TableName 
            AND TheKey = convert(varchar(50), @LoadGuid))
BEGIN
    -- Your logic here
END
于 2012-10-01T16:21:19.110 に答える
0

クエリの結果の行数を知りたいだけの場合は、選択リストを のみ に変更してみてください'SELECT COUNT(*) FROM MyTable ... '。これにより、単一の結果としてカウントが得られます。

于 2012-10-01T16:11:10.733 に答える
0
declare @count int

exec sp_executeSql 
    N'set @count = (select count(*) from MyTable where TableName = ''' + @tableName + '''
    and TheKey =  ''' + convert(varchar(50), @LoadGuid) + '''',
    N'@count int output',
    @count = @count output

if @count > 0
    print 'rows exist'
else
    print 'no rows'
于 2012-10-01T16:11:11.530 に答える