Sql 如何将表中字段的值更新为大多数情况下唯一的随机数?
我有一张简单的桌子:Sql 如何将表中字段的值更新为大多数情况下唯一的随机数?,sql,sql-server,Sql,Sql Server,我有一张简单的桌子: CREATE TABLE [dbo].[Word] ( [WordId] INT IDENTITY (1, 1) NOT NULL, [NameId] INT NOT NULL PRIMARY KEY CLUSTERED ([WordId] ASC) ); 我在NameId上有一个唯一的索引 我正在尝试更新此表并将一列更改为随机数: UPDATE Word SET NameId
CREATE TABLE [dbo].[Word] (
[WordId] INT IDENTITY (1, 1) NOT NULL,
[NameId] INT NOT NULL
PRIMARY KEY CLUSTERED ([WordId] ASC)
);
我在NameId上有一个唯一的索引
我正在尝试更新此表并将一列更改为随机数:
UPDATE Word SET NameId = ROUND(RAND()*2147483647,0)
我意识到这不起作用的可能性非常小,但实际上每次都会失败,即使表只有非常少的行,更新总是失败,并说有重复
有谁能告诉我这里发生了什么,并建议一种更新此表的方法,以便大多数时候不会创建重复的NameId值 您有多少行?这可能是一个类似的例子 您是否尝试过这样做:
SELECT ROUND(RAND()*2147483647,0) FROM Word
这些数字真的需要伪随机吗?您可以使用使它们递增。您有多少行?这可能是一个类似的例子 您是否尝试过这样做:
SELECT ROUND(RAND()*2147483647,0) FROM Word
这些数字真的需要伪随机吗?您可以使用使它们递增。如果要用相同的值更新每个NameId,请使用WHERE语句仅更新一行 编辑:这应该可以完成您正在寻找的技巧,NewId为每一行生成新id
UPDATE Word SET NameId = abs(checksum(NewId()) % 2147483647)
您正在用相同的值更新每个NameId,请使用WHERE语句仅更新一行 编辑:这应该可以完成您正在寻找的技巧,NewId为每一行生成新id
UPDATE Word SET NameId = abs(checksum(NewId()) % 2147483647)
我桌上大约有500行。如果可能的话,我真的很想把它们变成随机的,而不是顺序的。Hynek评论说我正在用相同的值更新行。这可能是问题所在吗?我原以为它会遍历每一行并使用不同的值,但现在我不确定。我希望每一行都有不同的值。谢谢,我桌上大约有500行。如果可能的话,我真的很想把它们变成随机的,而不是顺序的。Hynek评论说我正在用相同的值更新行。这可能是问题所在吗?我原以为它会遍历每一行并使用不同的值,但现在我不确定。我希望每一行都有不同的值。谢谢,我刚刚试过你的代码,20行没有唯一索引,每个结果都是相同的值。你可能会用这种方法得到许多重复的代码。我刚刚试过你的代码,20行没有唯一索引,每个结果都是相同的值。你可能会用这种方法得到许多重复的代码。我需要用每个不同的方法更新500行。我不知道你使用WHERE语句的意思,除非我发布了500次。我想我需要找到一些方法来循环浏览这些行。对不起,这里现在是凌晨,我花了一分钟的时间来整理您想要的内容,我编辑了我的答案,希望它对您有用:谢谢。我会试试这个。为了测试,我想先在另一张桌子上测试一下。如何从包含所有Word数据的Word表中创建另一个表?我尝试将表word2创建为select*from word,但这不起作用。这是一个值得提出的新问题,但使用:select*INTO dbo.WordTesting from dbo.WordI需要更新500行,每行都不同。我不知道你使用WHERE语句的意思,除非我发布了500次。我想我需要找到一些方法来循环浏览这些行。对不起,这里现在是凌晨,我花了一分钟的时间来整理您想要的内容,我编辑了我的答案,希望它对您有用:谢谢。我会试试这个。为了测试,我想先在另一张桌子上测试一下。如何从包含所有Word数据的Word表中创建另一个表?我尝试将表word2创建为select*from word,但这不起作用。这是一个值得提出的新问题,但使用:select*INTO dbo.WordTesting from dbo.word