【发布时间】: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(), …);您的每个项目表都将具有相同的ItemId和DateCreated列定义。如果这不是您想要的,那么您可能最好使用当前架构。
标签: sql sql-server tsql sql-server-2012