Sql 创建唯一标识符为PK的表

Sql 创建唯一标识符为PK的表,sql,tsql,Sql,Tsql,我一直在尝试(未成功)创建一个以UNIQUEIDENTIFIER作为主键的表。下面的脚本可以很好地创建表,但是没有指定PK。然而,这是我第一次使用UNIQUEIDENTIFIER。有什么想法吗 T-SQL CREATE TABLE [dbo].[AgentRelationshipCodes] ( Id UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID(), RelationshipId char(3) NULL, EffectiveDate datetime NUL

我一直在尝试(未成功)创建一个以
UNIQUEIDENTIFIER
作为主键的表。下面的脚本可以很好地创建表,但是没有指定PK。然而,这是我第一次使用UNIQUEIDENTIFIER。有什么想法吗

T-SQL

CREATE TABLE [dbo].[AgentRelationshipCodes]
(
Id UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID(),
RelationshipId char(3) NULL,
EffectiveDate datetime NULL,
LastChangeDate datetime NOT NULL,
LastChangeId char(6) NOT NULL,
AgtTableId int FOREIGN KEY REFERENCES AgentTransmission(ID)
);
管理工作室

create table [dbo].[AgentRelationshipCodes]
(
    Id UNIQUEIDENTIFIER NOT NULL PRIMARY KEY DEFAULT NEWID(),
    .
    .
    .
)

对其他表格重复上述步骤

  • 答复

只需添加:
CONSTRAINT-PK\u-AgentRelationshipCodes\u-ID主键聚集(ID)
CONSTRAINT-PK\u-AgentRelationshipCodes\u-ID主键非聚集(ID)
或稍短一点:在
NEWID()
之后添加
PRIMARY-KEY[CLUSTERED]
。我强烈建议不要这样设置。请务必将唯一标识符作为主键,但请将其放在标识列中,并将其作为集群键。当使用唯一标识符作为集群键时,插入会非常昂贵,并且最终会产生巨大的碎片(当您将其作为主键时,默认情况下会是这样,除非您明确地执行其他操作)。如果必须将其设置为集群键,则使用
NEWSEQUENTIALID()
作为默认值。虽然我认为使用GUID是一种可怕的做法,但在某些情况下可能需要它。但是,不要使用newID()使用NEWSEQUENTIALID()。@Lamak他没有说他这样做,但他也没有说他不希望对其进行集群,默认情况下,主键将是集群键。表中也没有其他适合集群键的候选项。