虽然我已经删除了临时表,但是如果将创建具有相同表名和附加列名的临时表,则不允许我选择新列名。
我一直在使用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
的结果。
我无法为动态列选择*
,也不允许我选择其他列。
为什么?
答案 0 :(得分:2)
您需要GO
来分隔DROP
和CREATE
语句。它们需要分开进行。
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