如何在CREATE TABLE表达式中参数化表名?

时间:2014-04-25 20:59:43

标签: sql-server tsql create-table

我想知道是否存在表达类似以下内容的语法:

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与表名的参数一起使用吗?

2 个答案:

答案 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中完成所有操作。