我正在尝试使用 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/