intを文字列に連結することはできません。代わりに:
SET @sql = N'DECLARE @Rt INT; SET @Rt = ' + @RowTo;
は次のものが必要です。
SET @sql = N'DECLARE @Rt INT; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
をここで何が起こっているか説明を助けるために。のは、(最終的には、それは数になります場合でも)文字列にそれを構築するために@RowTo = 5
DECLARE @RowTo INT;
SET @RowTo = 5;
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'SELECT ' + CONVERT(VARCHAR(12), @RowTo) + ' * 5';
EXEC sp_executeSQL @sql;
を言ってみましょう、私はそれを変換する必要があります。しかし、あなたが見ることができるように、数字は実行時には数字として扱われます。答えは25ですよね?あなたのケースでは
は、あなたが本当に@sql文字列内@Rtなどを再宣言する必要はありません、あなただけ言う必要がある:
SET @sql = @sql + ' WHERE RowNum BETWEEN '
+ CONVERT(VARCHAR(12), @RowFrom) + ' AND '
+ CONVERT(VARCHAR(12), @RowTo);
適切なパラメータを持っている方が良いでしょうけれども、例えばただ、FYI
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
EXEC sp_executesql @sql,
N'@RowFrom INT, @RowTo INT',
@RowFrom, @RowTo;
私はこの質問に特に当てはまらないので、私は答えを追加しませんが、このエラーのためのgoogleの最初の結果として、 'GO'を使うと宣言された変数が見えないその声明を過ぎて。 – IronSean