【问题标题】:Insert NULL and DEFAULT values with an INSERT/SELECT statement使用 INSERT/SELECT 语句插入 NULL 和 DEFAULT 值
【发布时间】:2009-04-22 11:39:23
【问题描述】:

在 MICROSOFT SQL SERVER 中有下表:

CREATE TABLE [T1]
(
    [ID] int IDENTITY (1, 1) NOT NULL,
    [col1] int NOT NULL,
    [col2] int NOT NULL,
    [col3] int NULL,
    [col4] datetime NOT NULL DEFAULT (getdate()),
    [col5] datetime NOT NULL DEFAULT (getdate())
)

我想编写一个插入语句,从另一个表中选择 2 列并将所有其他列插入为 NULL 或默认值。 这是我迄今为止尝试过的(但它不起作用):

    INSERT INTO [T1] ([col1],[col2], [COL3])
SELECT [1column],[2column],NULL
FROM [T2]

当我右键单击 T1 表并选择打开表时,该表只有 2 列,即使在对象资源管理器的“文件夹”列中也有所有列

我想要实现的是在 T1 中:在 Col1 和 COL2 中是 SELECT 的结果,在 COL3 中是 NULL,在 COL4 和 COL5 中是默认值!

【问题讨论】:

  • 当您说查询不起作用时,如果您在尝试运行它时实际向我们展示服务器返回的错误消息会更有帮助。

标签: sql-server


【解决方案1】:
INSERT INTO [T1] ([col1], [col2], [COL3])
SELECT [1column],[2column],NULL
FROM [T2]

这应该可以正常工作,刚刚检查过:

INSERT
INTO    [T1] ([col1], [col2], [col3])
SELECT  1, 2, NULL

SELECT  *
FROM    [T1]

id    col1  col2  col3  col4                     col5
---   ---   ---   ---   ---                      ---
1     1     2     NULL  2009-04-22 15:46:47.090  2009-04-22 15:46:47.090

您收到的确切错误是什么?

【讨论】:

    【解决方案2】:

    当您选择打开表格并且您已经有一个之前打开表格的窗口时,它将显示该窗口而不是打开另一个窗口。您看到的是表只有两列时的旧结果。

    关闭该窗口并再次打开表格以查看表格的当前状态。

    【讨论】:

      【解决方案3】:

      表格错误、查询错误或权限错误。

      1. 在 SSMS 中右键单击表名,然后单击刷新。你看到 5 列吗? SELECT * FROM T1 会给你所拥有的。

      2. 当你右击..打开表时,点击工具栏上的【SQL】按钮,你看到了吗 从 T1 中选择 *?

      3. 您在其他列上没有SELECT 权限,但拥有INSERT(不太可能),因此元数据可见性会阻止SELECT * 正常工作。

      【讨论】: