如何创建sp_executesql来动态删除表



由于某些原因,我试图创建一个动态脚本来删除我之前创建的表。我不能做正确的语法,我需要帮助这件事。

当我运行脚本时,它给出了错误:

"过程期望参数'@statement'类型为'ntext/nchar/nvarchar'。"

,这是我的脚本。我猜在sp_executesql表述中有一个错误。我该如何解决这个问题?

DECLARE @sql VARCHAR(MAX);
DECLARE @tmpTableName VARCHAR(max);
SET @tmpTableName = '##gmAAA_COLLATION';
SET @sql = 'DROP TABLE @tmpTableName';
EXEC sp_executesql @sql, N'@tmpTableName NVARCHAR(max)', @tmpTableName;

你不能在静态SQL中这样做,即表名永远不能在这样的SQL语句中作为参数。对于列名、模式名等也是如此。

如果您想使用sp_executesql来实现这一点,您可以动态地构建SQL,如下所示:

SET @sql = 'DROP TABLE '+QUOTENAME(@tmpTableName);
EXEC sp_executesql @sql;

PS: sp_executesql过程的@stmt参数需要为NVARCHAR(...)类型

SET @sql = 'DROP TABLE '+@tmpTableName;
EXEC sp_executesql @sql;

sp_executesql需要对@stmt和@params参数使用nvarchar

因此将varchar变量的数据类型更改为nvarchar,如下所示

DECLARE @sql NVARCHAR(MAX);
DECLARE @tmpTableName VARCHAR(max);

尝试以下查询:-

    SET @sql = 'DROP TABLE @tmpTableName'; EXEC (@sql)
OR
DECLARE @sql NVARCHAR(MAX);
DECLARE @tmpTableName NVARCHAR(max)
SET @tmpTableName = '##gmAAA_COLLATION';

SET @sql = 'DROP TABLE'+QUOTENAME(@tmpTableName);
EXEC sp_executesql @sql,N'@tmpTableName NVARCHAR(max)',@tmpTableName 

相关内容

  • 没有找到相关文章

最新更新