【问题标题】:Msg 2812 : "Create Table Using Dynamic Script"消息 2812:“使用动态脚本创建表”
【发布时间】:2013-09-10 04:18:21
【问题描述】:

我想使用动态 SQL 创建一个表。

如果我使用

创建表
CREATE Table TodayTemp(id varchar(20))
DROP TABLE TodayTemp

那么就没有问题了。它工作正常。但是使用它的问题是我无法动态创建列。因此,我尝试在变量中使用 store create 脚本,然后最终使用 EXEC 命令执行它们。

喜欢

Declare @CreateTableCmd varchar(max)
SET @CreateTableCmd = 'CREATE Table TodayTemp(id varchar(20))'
Exec @CreateTableCmd

但这会导致错误

消息 2812,第 16 级,状态 62,第 6 行
找不到存储过程“CREATE Table TodayTemp(id varchar(20))”。

【问题讨论】:

  • 顺便说一句,你的小提琴什么也没显示。
  • 实际上,Fiddel 在没有任何错误的情况下完成任何事情之前都不会更改其 URL。

标签: sql sql-server sql-server-2008 dynamic-tables


【解决方案1】:

执行时在变量周围添加括号

Declare @CreateTableCmd varchar(max)
SET @CreateTableCmd = 'CREATE Table TodayTemp (id varchar(20))'
Exec (@CreateTableCmd)
     ^---------------^--------here

SQLFiddle demo

【讨论】:

【解决方案2】:

如果你想用 exec 来执行你的脚本,这样调用它:

Exec (@CreateTableCmd)

另一种方法是使用sp_executesql 存储过程:

exec sp_executesql @stmt = @CreateTableCmd

有很多链接比较这两种方法:

【讨论】:

    【解决方案3】:
    Declare @CreateTableCmd varchar(max)
    SET @CreateTableCmd = 'CREATE Table TodayTemp'
    Exec (@CreateTableCmd)
    

    这应该可以解决问题

    拉吉

    【讨论】:

      猜你喜欢
      • 2015-01-31
      • 2018-02-09
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      相关资源
      最近更新 更多