2013-08-26 111 views
0

我想使用sql字符串爲變量賦值選擇值。下面是我的代碼:如何使用Sql字符串將變量賦值給變量

DECLARE @maxRow INT, @tableName NVARCHAR(128) = N'whatever'; 

select @maxRow=Max(id) from @tableName 

但是,這將引發一個錯誤:

Msg 1087, Level 16, State 1, Line 3
Must declare the table variable "@tableName".

雖沒聲明變量。

回答

1

除非將其放入動態SQL中,否則不能使用表名的變量。該代碼目前預計@tableName是一個表變量,而不是一個字符串,儘管從您的語法中可以清楚地看到這不是您想要的。這種用法聞起來像次優的設計和適合於顯著SQL注入風險,但可以而是試圖驗證碼:

DECLARE @maxRow INT; 

DECLARE @sql NVARCHAR(MAX) = N'SELECT @maxRow = MAX(id) FROM ' 
    + QUOTENAME(@tableName) + ';'; 

EXEC sp_executesql @sql, N'@maxRow INT OUTPUT', @maxRow OUTPUT; 

PRINT @maxRow; 

請不要對SQL注入和規範化閱讀起來。

+0

非常感謝..這是工作完美。 – maria