【问题标题】:How to insert into a table that specifies a DEFAULT value for every column?如何插入为每列指定默认值的表中?
【发布时间】:2014-11-12 02:31:27
【问题描述】:

我有一个表,每当插入发生时,所有列都会自动填充:

CREATE TABLE …
(
    ItemID      INT       NOT NULL IDENTITY(…),
    DateCreated DATETIME2 NOT NULL DEFAULT GETDATE()
);

如何编写一个 SQL 语句,在此表中插入一个新行,而无需手动提供任何要插入的具体值?

(已经有a similar question,但不同之处在于它是关于一个表,其中包含一些必须手动提供值的非DEFAULT 列。)

【问题讨论】:

  • 老实说,这样的桌子有什么用?
  • 该表用于保存在其他表中用作外键的 ItemID。例如,照片是一个项目,视频是一个项目等。ItemID 表需要在多个表中保持唯一的 ID。因此,当有人插入新照片时,它首先会在我的问题中提到的表中添加一行,该表会自动生成 ItemID 的唯一值。这个自动生成的值作为 FK 插入到照片表中。
  • 替代方案:使用SEQUENCE 跨多个表生成唯一键值。这是 SQL Server 2012 的一项新功能,它自身也存在一些问题(类似于 IDENTITY),但所需的存储空间比额外的表要少。
  • @volumeone:ID 及其创建日期都将出现在各种项目表中。 CREATE SEQUENCE ItemId …; CREATE TABLE BlobItems (ItemId INT NOT NULL DEFAULT NEXT VALUE FOR ItemId, DateCreated DATETIME2 NOT NULL DEFAULT GETDATE(), …); 您的每个项目表都将具有相同的 ItemIdDateCreated 列定义。如果这不是您想要的,那么您可能最好使用当前架构。

标签: sql sql-server tsql sql-server-2012


【解决方案1】:

使用DEFAULT VALUES 选项:

INSERT INTO IndentitySpecification
DEFAULT VALUES;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2011-11-24
    • 1970-01-01
    • 2015-09-07
    • 2011-03-24
    相关资源
    最近更新 更多