不能將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,對嗎?
在你的情況,你並不真的需要重新申報@Rt等@sql串裏面,你只需要說:
SET @sql = @sql + ' WHERE RowNum BETWEEN '
+ CONVERT(VARCHAR(12), @RowFrom) + ' AND '
+ CONVERT(VARCHAR(12), @RowTo);
雖然這將是最好有適當的參數,例如
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
EXEC sp_executesql @sql,
N'@RowFrom INT, @RowTo INT',
@RowFrom, @RowTo;
我不會添加一個答案,因爲它不具體適用於這個問題,但作爲谷歌這個錯誤的第一個結果,值得注意的是,使用'GO'會導致一個新的分支聲明變量不可見過去的聲明。 – IronSean