SQL 服务器动态 SQL 执行
SQL Server Dynamic SQL Execution
我有一个动态 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
Cannot drop the table '@ItemAreaCode.ChangedRMAllocation', because it does not exist or you do not have permission.
打印出来的查询是..
DROP TABLE [@ItemAreaCode].[ChangedRMAllocation];
我需要的是:
DROP TABLE [A062].[ChangedRMAllocation];
您可能打算扩展变量:
DECLARE @ItemAreaCode sysname = 'A062',
@SQLStringDropTable NVARCHAR(MAX);
SET @SQLStringDropTable =
'DROP TABLE ' + quotename(@ItemAreaCode) + '.[ChangedRMAllocation]';
EXEC (@SQLStringDropTable);
您正在将参数设置为动态 SQL 中的字符串。
@ItemAreaCode
不应包括在内。
这应该有效:
DECLARE @ItemAreaCode NVARCHAR(MAX) = 'A062',
@SQLStringDropTable NVARCHAR(MAX);
SET @SQLStringDropTable= 'DROP TABLE' + ' ['
+ @ItemAreaCode + '].[ChangedRMAllocation]'
PRINT @ItemAreaCode
EXEC (@SQLStringDropTable);
希望对您有所帮助
试试这个
DECLARE @ItemAreaCode NVARCHAR(MAX) = 'A062'
,@SQLStringDropTable NVARCHAR(MAX);
SET @SQLStringDropTable = 'DROP TABLE [' + @ItemAreaCode + '].[ChangedRMAllocation]'
EXEC (@SQLStringDropTable)
我有一个动态 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
Cannot drop the table '@ItemAreaCode.ChangedRMAllocation', because it does not exist or you do not have permission.
打印出来的查询是..
DROP TABLE [@ItemAreaCode].[ChangedRMAllocation];
我需要的是:
DROP TABLE [A062].[ChangedRMAllocation];
您可能打算扩展变量:
DECLARE @ItemAreaCode sysname = 'A062',
@SQLStringDropTable NVARCHAR(MAX);
SET @SQLStringDropTable =
'DROP TABLE ' + quotename(@ItemAreaCode) + '.[ChangedRMAllocation]';
EXEC (@SQLStringDropTable);
您正在将参数设置为动态 SQL 中的字符串。
@ItemAreaCode
不应包括在内。
这应该有效:
DECLARE @ItemAreaCode NVARCHAR(MAX) = 'A062',
@SQLStringDropTable NVARCHAR(MAX);
SET @SQLStringDropTable= 'DROP TABLE' + ' ['
+ @ItemAreaCode + '].[ChangedRMAllocation]'
PRINT @ItemAreaCode
EXEC (@SQLStringDropTable);
希望对您有所帮助
试试这个
DECLARE @ItemAreaCode NVARCHAR(MAX) = 'A062'
,@SQLStringDropTable NVARCHAR(MAX);
SET @SQLStringDropTable = 'DROP TABLE [' + @ItemAreaCode + '].[ChangedRMAllocation]'
EXEC (@SQLStringDropTable)