sql - 如何创建 sp_executesql 以动态删除表

标签 sql sql-server sp-executesql

出于某些原因,我正在尝试创建一个动态脚本来删除我之前创建的表。我无法正确使用语法,因此我需要帮助。

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

"Procedure expects parameter '@statement' of type '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(...) 类型。

关于sql - 如何创建 sp_executesql 以动态删除表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40625988/

相关文章:

sql - 十进制字段在 IBM AS400 的窗口上显示负数

sql - 好的开源 SQL 解析器?

sql-server - 如何将两个选择语句合并为一个具有单行和自定义列名称的选择语句

sql-server - SQL Server 错误 : "%" is not a constraint. 无法删除约束。查看之前的错误

sql - T-SQL 使用 sp_executesql 使用动态命名数据库创建表

sql - Rails Arel 和 Active Record 谓词

sql - 通过流分析将带有数组的流传递到 SQL 中的多行

sql-server - 访问在不同范围内创建的 SQL Server 临时表

sql - SQL 标准与 T-SQL 扩展的性能

sql - 将临时表传递给 EXEC sp_executesql