【发布时间】:2016-06-23 07:40:32
【问题描述】:
我有这张桌子:
CREATE TABLE [dbo].[Word] (
[WordId] INT NOT NULL,
[Name] VARCHAR (20) NOT NULL,
[StatusId] INT DEFAULT ((1)) NULL,
[Syllables] VARCHAR (20) NULL,
[Ascii] AS (ascii([Name])) PERSISTED,
[CategoryId] INT DEFAULT ((1)) NOT NULL,
[GroupId] INT DEFAULT ((1)) NOT NULL,
[LessonId] INT DEFAULT ((1)) NOT NULL,
[CreatedBy] INT DEFAULT ((1)) NOT NULL,
[CreatedDate] DATETIME DEFAULT (getdate()) NOT NULL,
[ModifiedBy] INT DEFAULT ((1)) NOT NULL,
[ModifiedDate] DATETIME DEFAULT (getdate()) NOT NULL,
[Version] ROWVERSION NULL,
PRIMARY KEY CLUSTERED ([WordId] ASC),
CONSTRAINT [FK_WordLesson] FOREIGN KEY ([LessonId]) REFERENCES [dbo].[Lesson] ([LessonId]),
CONSTRAINT [FK_WordWordCategory] FOREIGN KEY ([CategoryId]) REFERENCES [dbo].[WordCategory] ([WordCategoryId]),
CONSTRAINT [FK_WordWordGroup] FOREIGN KEY ([GroupId]) REFERENCES [dbo].[WordGroup] ([WordGroupId])
);
GO
CREATE NONCLUSTERED INDEX [Word_Category_IX]
ON [dbo].[Word]([CategoryId] ASC);
GO
CREATE NONCLUSTERED INDEX [Word_Group_IX]
ON [dbo].[Word]([GroupId] ASC);
GO
CREATE NONCLUSTERED INDEX [Word_Lesson_IX]
ON [dbo].[Word]([LessonId] ASC);
如何将 WordId 的值更改为介于 1 和 INT 列最大值之间的随机数?
请注意,我知道随机数有可能被使用两次,但它是测试数据,所以我不太担心。
【问题讨论】:
-
但是你为什么要这样做呢?您要解决的实际问题是什么?
-
为什么需要它是一个随机数?这是 PK,所以您要确保您没有创建重复项。这正是标识列的用途。还有,你说说INT列的最大值,是哪个INT列?
-
根据定义,主键不应该是唯一的(即使在测试数据中)?
-
是否要将主键“更改”为随机数?或者你希望它在插入行时是一个随机数?
-
@lopushen 是的,主键必须是唯一的。只有当他创建了一个复合主键(例如
(WorldId, SomeOtherColumn))时,他才能在WorldId中有重复项。
标签: sql-server