0

以下のような方法でカウンターを使用したい:

exec
('begin insert into ' + @temp07 + ' (FileID,FileName)
Select aof_id,aof_fileName from PaFi07(' + @partId + ');

sp_executesql @sqlCounter, N'@intCount int output, @intConst int,  @intCount = @intCount output,  @intConst = @intConst 
end')

では、どうすればカウンターを機能させることができますか?

このEXECコマンドTHANX内でカウンターが機能するという提案

4

3 に答える 3

0

スニペットにはいくつかのエラーがあります。まず、変数を数値として使用するつもりなのに、変数を varchar(10) として宣言しています。これらは、smallint、int、または bigint として宣言する必要があります。

次に、これらの varchar 変数を使用して文字列を作成し、数値 1 を追加して @inCount に格納されている値に 1 を追加しようとしています。

変数は数値ではなく文字列であるため、+ 記号はそれらを連結しようとします。

エラーを理解するには、まず、数値 1 を文字列に変換し、EXEC を次のように記述します。

exec ('SET ' + @intCount + ' = ' + @intCount + '1') 

それが完了したら、EXEC を削除し、連結する文字列を新しい文字列変数に割り当てます。そう:

DECLARE @composedQuery varchar(1000)

SET @composedQuery = 'SET ' + @intCount + ' = ' + @intCount + '1'
SELECT @composedQuery

次のような結果が表示されます。

SET 5 = 51

確かに、これはEXECで実行しようとしているものではありませんよね? :)

正しい解決策は、他の回答で提供されています。スニペット全体を次のように書き直します。

declare @intCount int
declare @intConst int

set @intCount = 5
set @intConst = 1

SET @intCount = @intCount + 1
--OR
SET @intCount = @intCount + @intConst
于 2012-10-04T11:34:19.470 に答える
0

その必要はありませんexec

set @inCount = @intCount + @intConst

を使用する場合execは、値ではなく、文字列内の変数の名前を使用します。

exec('set @inCount = @intCount + @intConst')

編集:

新しい質問に対して; 値を文字列に連結します。

exec
('begin insert into ' + @temp07 + ' (FileID,FileName)
Select aof_id,aof_fileName from PaFi07(' + @partId + ');

sp_executesql @sqlCounter, N'@intCount int output, @intConst int,  @intCount = ' + @intCount + ' output,  @intConst = ' + @intConst + ' end')

それらが数値の場合は、キャストする必要があります。

... + cast(@intCount as varchar) + ...
于 2012-10-04T11:24:17.197 に答える
0

独自のスコープで実行することはできないため、変数識別子には意味がありませEXECん。EXEC

代わりに、それらを s として宣言し、ステートメント文字列とともに にint渡し、結果を出力として返すことができます。sp_executesql

declare @sql nvarchar(256) = 'SET @intCount = @intCount + @intConst'
EXEC sp_executesql @sql, 
    N'@intCount int output, @intConst int', 
    @intCount = @intCount output, 
    @intConst = @intConst

select @intCount 

>6
于 2012-10-04T11:26:22.080 に答える