這是沒有任何問題:爲什麼這個Dynamic Sql Statement失敗?
select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE
from [AdventureWorks2012].INFORMATION_SCHEMA.COLUMNS WHERE table_name='employee';
但是,當它移動到一個動態語句,它總是失敗:
begin
DECLARE @sqlstatement VARCHAR(MAX);
DECLARE @TableName varchar(max)='employee';
set @sqlstatement='select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE
from [AdventureWorks2012].INFORMATION_SCHEMA.COLUMNS WHERE table_name='[email protected];
print (@sqlstatement);
EXECUTE(@sqlstatement);
end
錯誤說:無效的列名 '員工'
一個最好的方式來調試動態SQL的問題就是出打印字符串,從打印語句的輸出複製到另一個查詢窗口並在那邊看看。我們傾向於依賴智能,SSMS使用的顏色編碼比您想象的要多。如果你這樣做了,你可能會很快注意到你的員工名字缺乏引號。 –