首页 文章

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

提问于
浏览
3

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

我一直在使用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 回答

  • 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
    

相关问题