【发布时间】: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