Sql server SQL中的WHILE循环,我希望在所有行中循环一次,并进行5次更新

Sql server SQL中的WHILE循环,我希望在所有行中循环一次,并进行5次更新,sql-server,tsql,Sql Server,Tsql,我在SQL查询中有一个WHILE循环 我有一张5排的桌子,与柜台相配 我将2048行随机分组,希望在这些行上插入1-5,随机插入一个列中,但我得到的是,查询在2048上循环一次并插入“1”,然后第二次循环并插入“5”,然后插入“3”,然后是“4”,最后是“2” 我寻找的是在2048行中循环一次,然后在单个列中随机插入1-5到2048行(1次) 下面是一个SQL,它工作正常,但错误 declare @counter int SET @counter = 1 BEGIN TRAN WHILE (@c

我在SQL查询中有一个WHILE循环

我有一张5排的桌子,与柜台相配

我将2048行随机分组,希望在这些行上插入1-5,随机插入一个列中,但我得到的是,查询在2048上循环一次并插入“1”,然后第二次循环并插入“5”,然后插入“3”,然后是“4”,最后是“2”

我寻找的是在2048行中循环一次,然后在单个列中随机插入1-5到2048行(1次)

下面是一个SQL,它工作正常,但错误

declare @counter int
SET @counter = 1
BEGIN TRAN
WHILE (@counter <= 6)
BEGIN
SELECT id, city, wage_level 
    FROM myFirstTable
    ORDER BY NEWID()

    UPDATE myFirstTable
        SET wage_level = @counter
        SET @counter = @counter + 1
    CONTINUE
END
COMMIT TRAN 
等等


谢谢,每个人都不需要循环。SQL最适合基于集合的方法。
以下是一种方法:

创建并填充样本表(请在以后的问题中保存此步骤)

更新声明:

UPDATE myFirstTable 
SET wage_level = (ABS(CHECKSUM(NEWID())) % 5) + 1
检查更新:

SELECT *
FROM myFirstTable
结果:

id  city        wage_level
1   Denver      3
2   Chicago     3
3   Seattle     2
4   Los Angeles 4
5   Boise       3

说明:用于生成guid,基于该guid获取数字,仅获取正值,
%5
仅获取0到4之间的值,最后,
+1
仅获取1到5之间的值:

无需循环。SQL最适合基于集合的方法。
以下是一种方法:

创建并填充样本表(请在以后的问题中保存此步骤)

更新声明:

UPDATE myFirstTable 
SET wage_level = (ABS(CHECKSUM(NEWID())) % 5) + 1
检查更新:

SELECT *
FROM myFirstTable
结果:

id  city        wage_level
1   Denver      3
2   Chicago     3
3   Seattle     2
4   Los Angeles 4
5   Boise       3

说明:用于生成guid,基于该guid获取数字,仅获取正值,
%5
仅获取0到4之间的值,最后,
+1
仅获取1到5之间的值:

您的
UPDATE
没有where子句。它只是更新每一行。
myFirstTable
是否具有唯一键?您可以使用它来拾取行。或者您可以使用mod(%)根据一个数字吐出1-5(即
NEWID()
)。那么你就不需要循环了。你的
UPDATE
没有where子句。它只是更新每一行。
myFirstTable
是否具有唯一键?您可以使用它来拾取行。或者您可以使用mod(%)根据一个数字吐出1-5(即
NEWID()
)。那你就不需要回路了,佐哈尔,谢谢你,先生。请原谅我创建了“技能表”,但因为我认为它不相关,我以后不应该这样做,所以我没有在这里展示它。虽然只有五行,但事实是,我没有给你所有的信息。再次感谢,新年快乐。很高兴能帮忙:-)。不要担心表格,只需记住在您将来的问题中,将相关表格DDL和DML作为样本数据,以便更容易回答。Zohar,谢谢您,先生。请原谅我创建了“技能表”,但因为我认为它不相关,我以后不应该这样做,所以我没有在这里展示它。虽然只有五行,但事实是,我没有给你所有的信息。再次感谢,新年快乐。很高兴能帮忙:-)。不要担心表格,只要记住在将来的问题中,将相关表格DDL和DML作为示例数据包含在内,这样就更容易回答了。