27

次のSQLコマンドがあります。

ALTER TABLE dbo.UserProfiles
ADD ChatId UniqueIdentifier NOT NULL,
UNIQUE(ChatId),
CONSTRAINT "ChatId_default" SET DEFAULT newid()

この列を一意にしたいと考えており、テーブルに行が追加されるたびに新しい GUID を生成できるようにしたいと考えています。この列は、既に IDENTITY 列を持っているため、IDENTITY 列ではありません。これは別物です。ユーザーが既に存在するテーブルにこの列を追加するにはどうすればよいですか。

4

2 に答える 2

34

このサンプルを参照してください:

create table test (mycol UniqueIdentifier NOT NULL default newid(), name varchar(100))
insert into test (name) values ('Roger Medeiros')
select * from test

データが入力されたテーブルに null 以外のフィールドを追加するには、これが必要です。

alter table test add mycol2 UniqueIdentifier NOT NULL default newid() with values

CREATE UNIQUE NONCLUSTERED INDEX IX_test ON dbo.test
(
mycol
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,    ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
于 2012-08-15T18:36:40.430 に答える
16

デフォルトとして使用せずnewid()、代わりにnewsequentialid()を使用してください。newid()多くの断片化が発生し、インデックスに悪影響を及ぼします。

既存のデータを含むテーブルに新しい列を追加する限り、これを行うだけです:

    ALTER TABLE your_table
    ADD your_column UNIQUEIDENTIFIER DEFAULT newsequentialid() NOT null
于 2012-08-15T19:09:41.197 に答える