我有这张桌子:
CREATE TABLE [dbo].[Test] (
[TestId] INT IDENTITY (1, 1) NOT NULL,
[StatusId] INT NOT NULL,
[Text] NVARCHAR (400) NULL,
[TestUId] UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL
);
GO
CREATE NONCLUSTERED INDEX [Test_TestUId_IX]
ON [dbo].[Test]([TestUId] ASC);
如何更改此选项以使用GUID作为主键并在TestId上有索引?
答案 0 :(得分:1)
明确命名约束以便于后续表更改是一种很好的做法。我建议您使用NEWSEQUENTIALID()而不是NEWID(),因为增量键将提高大表的性能。下面是一个示例,假设您需要聚簇主键索引。
DECLARE
@ConstraintName sysname
,@SQL nvarchar(MAX);
SELECT @ConstraintName = name
FROM sys.objects
WHERE parent_object_id = OBJECT_ID(N'Test')
AND type = 'PK';
SET @SQL = N'ALTER TABLE dbo.Test
DROP CONSTRAINT ' + QUOTENAME(@ConstraintName) + ';';
EXEC sp_executesql @SQL;
ALTER TABLE dbo.Test
ADD CONSTRAINT PK_Test PRIMARY KEY CLUSTERED (TestUId);
DROP INDEX dbo.Test.index_TestId;
CREATE UNIQUE INDEX index_TestId ON Test (TestId);
答案 1 :(得分:1)
只需更改表并将TestUId设为主键即可。如果要为主键定义聚簇索引,请删除现有的聚簇索引。
ALTER TABLE Test
ADD CONSTRAINT PK_Test PRIMARY KEY CLUSTERED (TestUId)
答案 2 :(得分:-1)
您可以在创建表时建立主键,然后添加其他索引。
CREATE TABLE [dbo].[Test] (
[TestId] INT IDENTITY (1, 1) NOT NULL,
[StatusId] INT NOT NULL,
[Text] NVARCHAR (400) NULL,
[TestUId] UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
PRIMARY KEY ([TestUId])
)
CREATE INDEX index_TestId ON Test (TestId)