如何检查临时表是否存在,并在创建临时表之前删除它(如果存在)?

  • 回答 (2)
  • 关注 (0)
  • 查看 (268)

我正在使用下面的代码来检查临时表是否存在,并删除表,如果它存在之前再次创建。 只要我不改变列,它工作正常。 如果我稍后添加一列,它会给出一个错误说“无效列”。 请让我知道我做错了什么。

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
萌萌呆萌萌呆提问于
以往V回答于

声明应该是有序的

  1. Alter statement for the table
  2. GO
  3. Select statement.

如果没有之间的“GO”,整个事情将被视为一个单一的脚本,当select语句查找列,它不会被发现。

使用'GO'时,会将'GO'部分视为一个批处理,并在'GO'后进入查询。

秋之夕颜清念念不忘,必有回响回答于

我没有办法重现你的错误,

也许我不了解这个问题。

我大概说一下我的思路

在SQL Server 2005中,以下工作正常,在第二个选择结果中出现额外的“foo”列:

IF OBJECT_ID('tempdb..#Results') IS NOT NULL DROP TABLE #Results
GO
CREATE TABLE #Results ( Company CHAR(3), StepId TINYINT, FieldId TINYINT )
GO
select company, stepid, fieldid from #Results
GO
ALTER TABLE #Results ADD foo VARCHAR(50) NULL
GO
select company, stepid, fieldid, foo from #Results
GO
IF OBJECT_ID('tempdb..#Results') IS NOT NULL DROP TABLE #Results
GO

所属标签

可能回答问题的人

  • HKC

    红客学院 · 创始人 (已认证)

    27 粉丝7 提问5 回答
  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问3 回答
  • 螃蟹居

    1 粉丝0 提问2 回答
  • 富有想象力的人

    2 粉丝0 提问1 回答

扫码关注云+社区

领取腾讯云代金券