我有一个动态SQL查询
DECLARE @ItemAreaCode NVARCHAR(MAX) = 'A062',
@SQLStringDropTable NVARCHAR(MAX);
SET @SQLStringDropTable= 'DROP TABLE' + ' ' +
'[@ItemAreaCode].[ChangedRMAllocation]'
PRINT @ItemAreaCode
EXEC sp_executesql @SQLStringDropTable , N'@ItemAreaCode NVARCHAR(MAX)', @ItemAreaCode;
但是当我执行此操作时,我收到此错误:
Msg 3701,Level 11,State 5,Line 1
不能删除表' @ ItemAreaCode.ChangedRMAllocation',因为它不存在或您没有权限。
打印的查询是..
DROP TABLE [@ItemAreaCode].[ChangedRMAllocation];
我需要的是:
DROP TABLE [A062].[ChangedRMAllocation];
答案 0 :(得分:3)
您将参数设置为动态SQL中的字符串。
不应包括@ItemAreaCode
。
这应该有效:
DECLARE @ItemAreaCode NVARCHAR(MAX) = 'A062',
@SQLStringDropTable NVARCHAR(MAX);
SET @SQLStringDropTable= 'DROP TABLE' + ' ['
+ @ItemAreaCode + '].[ChangedRMAllocation]'
PRINT @ItemAreaCode
EXEC (@SQLStringDropTable);
希望这有帮助
答案 1 :(得分:1)
你可能想扩展变量:
DECLARE @ItemAreaCode sysname = 'A062',
@SQLStringDropTable NVARCHAR(MAX);
SET @SQLStringDropTable =
'DROP TABLE ' + quotename(@ItemAreaCode) + '.[ChangedRMAllocation]';
EXEC (@SQLStringDropTable);
答案 2 :(得分:1)
试试这个
DECLARE @ItemAreaCode NVARCHAR(MAX) = 'A062'
,@SQLStringDropTable NVARCHAR(MAX);
SET @SQLStringDropTable = 'DROP TABLE [' + @ItemAreaCode + '].[ChangedRMAllocation]'
EXEC (@SQLStringDropTable)