我想知道是否存在表达类似以下内容的语法:
DECLARE @MyTableNameVARCHAR(50)
SET @MyTableName= 'AccountSummary'
CREATE TABLE dbo.@MyTableName
(
Id int NOT NULL IDENTITY(1,1),
AccountId int NOT NULL
Amount real
)
显然,上述方法无效。我让我的脚本与EXEC
一起使用,但它似乎相当令人费解。我可以将CREATE TABLE
与表名的参数一起使用吗?
答案 0 :(得分:2)
DECLARE @MyTableName NVARCHAR(50);
SET @MyTableName = 'AccountSummary';
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = N'CREATE TABLE '+ QUOTENAME(@MyTableName) + N'
(
Id int NOT NULL IDENTITY(1,1),
AccountId int NOT NULL,
Amount REAL
)'
EXECUTE sp_executesql @Sql
或强>
DECLARE @MyTableName NVARCHAR(50);
SET @MyTableName = 'AccountSummary';
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = N'CREATE TABLE [@MyTableName]
(
Id int NOT NULL IDENTITY(1,1),
AccountId int NOT NULL,
Amount real
)'
EXECUTE sp_executesql @Sql
,N'@MyTableName NVARCHAR(50)'
,@MyTableName
答案 1 :(得分:2)
“我可以将CREATE TABLE与tablename的参数一起使用吗?”
没有。您必须使用动态SQL,因为您表明您已经有效。
这种事情本质上是错综复杂的。
根据您实际所做的事情,您可能会感觉更好的是让应用层包含DDL,而不是在TSQL中完成所有操作。