Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将表中字段的值更新为大多数情况下唯一的随机数?_Sql_Sql Server - Fatal编程技术网

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