所有,我有以下動態SQL查詢奇數動態SQL錯誤
DECLARE @TableName NVARCHAR(255);
SET @TableName = 'BadCodesErrSumm';
DECLARE @DropSql NVARCHAR(MAX);
SET @DropSql =
'IF EXISTS (SELECT *
FROM Report.sys.objects
WHERE name = ''' + @TableName + ''' AND type = ''U'')
DROP TABLE [IPAReport]..[' + @TableName + '];'
PRINT @DropSql;
EXEC @DropSql;
這將產生以下錯誤
Msg 203, Level 16, State 2, Line 11
The name 'IF EXISTS (SELECT *
FROM Report.sys.objects
WHERE name = 'BadCodesErrSumm' AND type = 'U')
DROP TABLE [Report]..[BadCodesErrSumm];' is not a valid identifier.
然而,打印輸出
IF EXISTS (SELECT *
FROM Report.sys.objects
WHERE name = 'BadCodesErrSumm' AND type = 'U')
DROP TABLE [Report]..[BadCodesErrSumm];
執行精細。 我錯過了什麼?
謝謝你的時間。
不要使用'[ '+ @tablename +']'。總是使用'quotename(@TableName,'[')'。 – GSerg 2012-07-19 15:26:45
我總是懶惰,因爲它是一個相當專業的WinForms應用程序。我認爲不會有注射攻擊的危險,但我認爲我應該始終以最佳做法來做到這一點。感謝您指出了這一點。 – MoonKnight 2012-07-19 15:37:30
以及爲什麼不只是'從Sys.tables中選擇OBJECT_ID其中name ='您的表名'# 以及爲什麼'從IPAReport.tables中選擇OBJECT_ID其中name ='Your Table Name''。抱歉,我無法理解「IPAReport」的含義? – 2012-07-19 17:59:11