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

标签 sql sql-server tsql create-table sp-executesql

我正在尝试使用 sp_executesql 在 T-SQL 中创建表。包含该表的数据库的名称是动态的。

DECLARE @ID int = 1031460
DECLARE @TableName nvarchar(max) = '[MyDatabase' + CAST(@ID as nvarchar(10)) + '].[dbo].[MyTable]'

DECLARE @CreateTable nvarchar(max) = N''
SELECT @CreateTable = 
N'
CREATE TABLE @TableName
(
    ID int
)
'

EXECUTE sp_executeSQL @CreateTable, N'@TableName nvarchar(max)', @TableName = @TableName

此脚本会导致此错误:

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '@TableName'.

指定基于sp_executeSQL参数动态创建的表名称的最佳方法是什么?

最佳答案

即使我们使用sp_executesql过程,您也无法将表名作为参数传递。您必须构建自己的动态 SQL 查询

SELECT @CreateTable = 
N'
CREATE TABLE ' + @TableName + '
(
ID int
)
'
Exec sp_executesql @CreateTable

关于sql - T-SQL 使用 sp_executesql 使用动态命名数据库创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41151859/

相关文章:

sql-server - 失去与 Microsoft Azure SQL 数据库的连接

mysql - 如何根据产品ID获取不同的状态计数

sql - 在azure虚拟机上运行的sql server web版上的Reporting服务可以使用azure数据库作为数据源吗?

sql - 需要获取两列组合都存在且不存在的行

sql - 如何将一个记录列更新为真,其他都为假

sql-server - T-SQL 写入文件 txt 或 csv

sql - 如何防止 'query timeout expired' ? (SQLNCLI11 错误 '80040e31' )

sql-server - 具有 DateTimeOffset 的执行计划行为

sql-server - SQL Server 2008 R2 将列添加到特定位置

sql - 如何通过相同的分组但不同的列(Sql Server 存储过程)合并 3 个不同的 Sql