为什么我无法使用此动态SQL创建表?

时间:2016-04-04 01:45:00

标签: sql sql-server stored-procedures dynamic-sql

我有一个程序:

ALTER PROCEDURE SP_CREATETABLE
(
    @newTableName NVARCHAR(200)
)
AS
BEGIN
    DECLARE @sql NVARCHAR(MAX)
    SELECT @sql = 'create table @tableName (id int identity(1,1) primary key )'
    PRINT @sql
    EXEC sp_executesql @sql, N'@tableName nvarchar(200)', @newTableName
END

当我尝试执行此操作时:

EXEC SP_CREATETABLE 'NEWTABLENAME';

我收到此错误:

  

Msg 102,Level 15,State 1,Line 12
  '@tableName'附近的语法不正确。

2 个答案:

答案 0 :(得分:4)

你需要这样的东西:

Person

答案 1 :(得分:1)

您无法创建表的原因是因为参数仅适用于查询中的值,而不适用于表名或列名。

我经常使用REPLACE()

来解决这个问题
ALTER PROCEDURE SP_CREATETABLE (
    @newTableName NVARCHAR(200)
)
AS
BEGIN
    DECLARE @sql NVARCHAR(MAX);
    SELECT @sql = 'create table @tableName (id int identity(1,1) primary key )';
    SELECT @sql = REPLACE(@sql, '@tableName', @newTableName);
    PRINT @sql;
    EXEC sp_executesql @sql;
END;