sql - 如果使用附加列名再次创建删除的临时表,则无法选择附加列名

标签 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

最佳答案

您需要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

关于sql - 如果使用附加列名再次创建删除的临时表,则无法选择附加列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22054491/

相关文章:

database - Firebase [字符串 :Any] but I need it to be an Dictionary

sql-server - `nodes()` 方法是否保持文档顺序?

sql-server - SQL Server - 同一列上的谓词和查找谓词

database - 哪种模式或结构

SQL:like v.equals 性能比较

php - SQL 更新不工作

php - 如何从两个不同的表中进行选择并按一列对它们进行排序?

mysql - 添加引用时出现 SQL 错误

sql - 这个插入查询有什么问题?

php - 当变量内容发生变化时自动更新数据库