2

SQL変数に値を入力しようとしています。コードが次のような場合に機能します。

declare @num_records int
set @num_records = ( select  distinct count(*) as num_recs 
   from dbo.tbllookup  )
print @num_records

例として、クエリをより単純にしましたが、複雑なクエリであり、クエリの一部を別の場所で再利用する必要があるため、変数に入れたいと考えています。だから私はこれを試しましたが、うまくいきません。エラーには、「キーワード 'exec' 付近の構文が正しくありません」と表示されます。

declare @num_records int
declare @sqlstr varchar(200)
set @sqlstr = '( select  distinct count(*) as num_recs 
   from dbo.tbllookup  )'
set @num_records = exec(@sqlstr)
print @num_records

私はSQLクエリの初心者です。ですから、概念を理解し、ここで何が間違っているのかを知りたいだけです。

ありがとう。

4

2 に答える 2

1

ご存知のように、この方法で変数を設定することはできません。これを行うにはを使用する必要がありますsp_executesql

Declare @Sql nvarchar(max);
Declare @CountResult int;

Set @Sql = 'Select @Count = Count(*) From SomeTable';
exec sp_executesql @Sql, N'@Count int OUTPUT', @CountResult OUTPUT

Select @CountResult

sp_executesql(Transact-SQL)

于 2012-05-16T17:51:33.920 に答える
0

出力パラメーターで sp_executeSQL を使用する必要があります

パラメーターを正しく使用していない場合、exec を sp_executesql に変更して もメリットはありません。

declare @sqlstr Nvarchar(200)
DECLARE @num_records int
set @sqlstr = '( select  distinct @num_records =  count(*)  
                  from dbo.tbllookup  )'
EXEC SP_EXECUTESQL @sqlstr, N'@num_records INT OUTPUT', @num_records OUTPUT

print @num_records
于 2012-05-16T17:53:10.530 に答える