繁体   English   中英

SQL Server动态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;

但是当我执行此操作时,出现以下错误:

消息3701,第11级,州5,第1行
无法删除表“ @ ItemAreaCode.ChangedRMAllocation”,因为该表不存在或您没有权限。

和打印的查询是..

DROP TABLE [@ItemAreaCode].[ChangedRMAllocation];

我需要的是:

DROP TABLE [A062].[ChangedRMAllocation];

您正在动态SQL中将参数设置为字符串。 @ItemAreaCode不应包括在内。

这应该工作:

DECLARE @ItemAreaCode NVARCHAR(MAX) = 'A062',
@SQLStringDropTable NVARCHAR(MAX);

    SET @SQLStringDropTable= 'DROP TABLE' + ' [' 
                            + @ItemAreaCode +  '].[ChangedRMAllocation]'

    PRINT @ItemAreaCode
    EXEC (@SQLStringDropTable);

希望这可以帮助

您可能打算扩展变量:

DECLARE @ItemAreaCode sysname = 'A062',
    @SQLStringDropTable NVARCHAR(MAX);

SET @SQLStringDropTable = 
    'DROP TABLE ' + quotename(@ItemAreaCode) + '.[ChangedRMAllocation]';
EXEC (@SQLStringDropTable);

尝试这个

DECLARE @ItemAreaCode NVARCHAR(MAX) = 'A062'
    ,@SQLStringDropTable NVARCHAR(MAX);

SET @SQLStringDropTable = 'DROP TABLE [' + @ItemAreaCode + '].[ChangedRMAllocation]'

EXEC (@SQLStringDropTable)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM