如果使用其他列名称再次创建删除的临时表,则无法选择其他列名称

时间:2014-02-26 22:09:00

标签: sql sql-server database sql-server-2008 temp

虽然我已经删除了临时表,但是如果将创建具有相同表名和附加列名的临时表,则不允许我选择新列名。

我一直在使用SQL Server 2008。

尝试使用此代码:

IF (object_id('tempdb..#xyz') IS NOT NULL)
    DROP TABLE #xyz;

CREATE TABLE #xyz(
     [a] [datetime] NULL,
     [b] [nvarchar](255) NULL,
     [c] [nvarchar](255) NULL
) ON [PRIMARY]
GO

IF (object_id('tempdb..#xyz') IS NOT NULL)
    DROP TABLE #xyz;

CREATE TABLE #xyz(
     [a] [datetime] NULL,
     [b] [nvarchar](255) NULL,
     [c] [nvarchar](255) NULL,
     [d] [nvarchar](255) NULL
) ON [PRIMARY]

SELECT [d] FROM  #xyz

这说:

Msg 207, Level 16, State 1, Line 13
Invalid column name 'd'.

同样,如果我们尝试选择Martin Parkin提到的*,它会给出列名为d的结果。

我无法为动态列选择*,也不允许我选择其他列。

为什么?

Fiddle

1 个答案:

答案 0 :(得分:2)

您需要GO来分隔DROPCREATE语句。它们需要分开进行。

IF (object_id('tempdb..#xyz') IS NOT NULL)
DROP TABLE #xyz;

CREATE TABLE #xyz(
     [a] [datetime] NULL,
     [b] [nvarchar](255) NULL,
     [c] [nvarchar](255) NULL
) ON [PRIMARY]
GO

IF (object_id('tempdb..#xyz') IS NOT NULL)
DROP TABLE #xyz;

GO

CREATE TABLE #xyz(
     [a] [datetime] NULL,
     [b] [nvarchar](255) NULL,
     [c] [nvarchar](255) NULL,
     [d] [nvarchar](255) NULL
) ON [PRIMARY]

SELECT [d] FROM  #xyz