SQL Server动态SQL执行

时间:2015-07-17 08:12:10

标签: sql sql-server dynamic-sql

我有一个动态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];

3 个答案:

答案 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)