【问题标题】:"Drop Table if exists" doesn't allow me to alter a temp table in the script after it's run once“如果存在则删除表”不允许我在脚本运行一次后更改临时表
【发布时间】:2022-06-10 19:08:37
【问题描述】:

在脚本中,我有一个临时表。在我的脚本中,我使用这个块来创建表格

drop table if exists #myTempTable 

create #myTempTable (
  dataid INT
, Description NVARCHAR(100) 
)

insert into #myTempTable 
(1 , 'blah') 

我可以在其中插入数据就好了。我可以多次运行它。但是如果我想在运行一次之后更改表中的列,我不能只在脚本的“创建”定义和“插入”语句中添加或删除列。我必须先独立运行Drop Table if exists #myTempTable,否则会报错:

消息 213,第 16 级,状态 1,第 9 行 列名或提供的值的数量与表定义不匹配。

这是预期的吗?我找不到有关此“功能”的任何文档。看来我应该能够像我独立运行它一样在脚本中删除表。

【问题讨论】:

  • 因为它在相同的上下文中结构被缓存(或其他东西)。如果你把它放在中间,我认为它有效。顺便说一句,表有列而不是字段。
  • 如果表在批处理编译时根本不存在,则引用它的语句的编译将推迟到语句执行时。如果表在批量编译时已经存在,则不会进行延迟编译,并且引用它的所有语句都需要与该结构一致
  • 假设您在 SSMS 查询窗口中运行脚本,只需在 drop 后添加一个 GO 批处理终止符。
  • 或者,做明智的事情并将drop也放在批处理的末尾

标签: sql-server tsql


猜你喜欢
  • 1970-01-01
  • 2011-11-07
  • 2016-01-29
  • 2010-10-14
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
相关资源
最近更新 更多