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)