2011-05-26 75 views
2

我有一个表,其中我有一个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字段被自动分配,就像主键字段一样。那可能吗?请不要这样,尽管这是一个有效的做法,但我不希望将该字段作为(表的一部分)主键。是否可以在每次插入时自动分配一个UNIQUEIDENTIFIER字段?

+0

该字段是否可以空? – 2011-05-26 09:26:48

+0

否...它必须始终与NULL不同。 – Miguel 2011-05-26 09:27:17

+0

你有没有考虑过触发器? – 2011-05-26 09:30:29

回答

4

使用列名单,然后和省略PK,GUID列

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

周围使用缺少列列表,这是最好的做法反正默认的作品。例如,如果您重新排序或添加列,该怎么办?并使用触发器不是最佳的或可伸缩性

编辑:使用触发器是一种解决方案,以避免最佳实践...并不会规模太好

+0

可能更好地说“改变PK”而不是忽略它 - 他可能会认为没有PK /聚集索引的表是可以的。 – 2012-06-30 02:04:19

0

应当在表模式的默认值。因此,在设置默认值后,您无需担心该列。

打开表格设计窗口并选择应该占据GUID信息的列。欲了解更多信息,请参阅下面的屏幕截图。

enter image description here

因此,通过设置(NEWID())作为默认值将让你插入的记录,而无需在INSERT语句中包含此列名。

请让我知道任何混乱

1

GBN是正确的情况下。我只需添加其他几点就可以考虑。

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

相关问题