【发布时间】:2021-05-12 17:27:43
【问题描述】:
我有一个表,其中有一列需要用类似的值更新
dummy1
dummy2
dummy3
..
..
..
dummy6
我创建了以下 while 循环脚本
create table people_test(UserName varchar(40))
GO
INSERT INTO people_test (UserName) values ('admin'),('test'),('opq'),('mn'),('ijkl'),('efgh'),('abcd')
GO
Select * from people_test
GO
DECLARE @i int;
DECLARE @j int = 1;
BEGIN
SELECT @i = COUNT(*) FROM people_test WHERE username <> 'admin';
WHILE(@j <= @i)
BEGIN
print 'i='+CONVERT(VARCHAR,@i)+' j='+CONVERT(VARCHAR,@j);
UPDATE people_test
SET
UserName = 'dummy'+ CONVERT(VARCHAR,@j)
WHERE username <> 'admin';
print 'i='+CONVERT(VARCHAR,@i)+' j='+CONVERT(VARCHAR,@j);
SET @j = @j + 1;
END;
END;
GO
预期结果
| UserName |
|---|
| admin |
| dummy1 |
| dummy2 |
| dummy3 |
我看到的结果
| UserName |
|---|
| admin |
| dummy6 |
| dummy6 |
| dummy6 |
【问题讨论】:
-
哪一列提供了分配
dummy1、dummy2等序列值的顺序? -
update上的where子句将非“管理员”行的 所有 行更改为 same 值。旁白:最佳实践是总是为可变长度类型提供长度,例如VarChar. -
@TimBiegeleisen - 用于排序,我有一个 id 列。这是展示我的问题的示例脚本。
-
@DaleK - 我的打印显示值为 i=6 j=1(受影响的 6 行) i=6 j=1 i=6 j=2(受影响的 6 行) i=6 j= 2 i=6 j=3(6 行受影响) i=6 j=3 i=6 j=4(6 行受影响) i=6 j=4 i=6 j=5(6 行受影响) i=6 j =5 i=6 j=6(影响6行)i=6 j=6 完成时间:2021-02-09T09:59:28.8045037+05:30
-
您应该在您的问题中edit 该信息,而不是尝试将其添加到评论中。
标签: sql sql-server tsql sql-update