是否可以在每次插入时自动分配到UNIQUEIDENTIFIER字段?

时间:2011-05-26 09:22:41

标签: sql sql-server-2005 sql-server-2008

我有一个表,其中我有一个INT IDENTITY(1,1)PRIMARY KEY字段,紧挨着它一个UNIQUEIDENTIFIER字段,我希望在每次插入表时自动分配。我尝试设置DEFAULT NEWID(),但它只有在我INSERT INTO TableName VALUES (DEFAULT, a, b, c, d, ...).时才能工作我能做什么NSERT INTO TableName VALUES (a, b, c, d, ...)和UNIQUEIDENTIFIER字段会像主键字段一样自动分配。那可能吗?请注意,尽管这是一个有效的事情,我不希望将此字段作为表的主键(的一部分)。

3 个答案:

答案 0 :(得分:4)

然后使用列列表并省略PK,GUID列

INSERT INTO TableName (col3, col4, col5, ...)
VALUES (a, b, c, d, ...) a

使用DEFAULT可以解决缺少列列表的问题,这无论如何都是最佳实践。例如,如果您重新排序或添加列,该怎么办?并且使用触发器不是最佳的或可扩展的

编辑:使用触发器是一种避免最佳实践的解决方法......并且不会扩展得太好

答案 1 :(得分:1)

gbn是对的。我只想补充一些你需要考虑的其他要点。

如果您的桌子上有唯一的ID,那么您为什么要或不需要UNIQUEIDENTIFIER?您应该选择其中一个作为您的PK,但不能同时选择两者。此外,在为数据库选择默认值时,请选择NEWSEQUENTIALID()而不是NEWID()。

答案 2 :(得分:0)

它应该是表架构中的默认值。因此,在设置默认值后,您无需担心此列。

打开表设计窗口并选择应该占用GUID信息的列。有关详细信息,请参见下面的屏幕截图。

enter image description here

因此,通过将(newID())设置为默认值,您可以插入记录而不在insert语句中包含此列名。

如果有任何混淆,请告诉我