【发布时间】:2010-10-14 03:06:08
【问题描述】:
我正在使用以下代码检查临时表是否存在,如果存在则删除该表,然后再次创建。只要我不更改列,它就可以正常工作。如果我稍后添加一列,它会给出“无效列”的错误。请让我知道我做错了什么。
IF OBJECT_ID('tempdb..#Results') IS NOT NULL
DROP TABLE #Results
CREATE TABLE #Results
(
Company CHAR(3),
StepId TINYINT,
FieldId TINYINT,
)
select company, stepid, fieldid from #Results
--Works fine to this point
IF OBJECT_ID('tempdb..#Results') IS NOT NULL
DROP TABLE #Results
CREATE TABLE #Results
(
Company CHAR(3),
StepId TINYINT,
FieldId TINYINT,
NewColumn NVARCHAR(50)
)
select company, stepid, fieldid, NewColumn from #Results
--Does not work
【问题讨论】:
-
你在哪里添加列?你能发布给你一个错误的确切代码吗?
-
我正在将该列添加到表#Results。如果您复制上面的代码并第一次运行它,您不会收到任何错误。现在,如果您在临时表中添加一列并将该列添加到 select 语句中,它将显示未找到列(或类似的内容)。
-
考虑使用以下模式:
BEGIN TRANSACTION; CREATE TABLE #Results; ...; DROP TABLE #Results; COMMIT。如果事务成功,该表将被删除。如果失败,表也会消失(因为它是在事务中创建的)。在任何情况下:无需检查表是否已经存在。 -
看起来你只需要 GO 语句。
标签: sql-server sql-server-2005 temp-tables alter-table