使用sql值集更新多行
我想使用更新查询更新多行。有一个主键。我不想更新主键。假设使用sql值集更新多行,sql,sql-server,union,sequential,Sql,Sql Server,Union,Sequential,我想使用更新查询更新多行。有一个主键。我不想更新主键。假设 id name address age 1 as re3 20 2 dg ht5 21 3 hf ujy6 23 4 ku tr5 25 这是桌子。 我想按顺序更新姓名、地址和年龄。 我有一组新值作为输入。像 (“yJ”,“ht43”,34) (“rt”,“fd43”,36) (“hg”,“hgd4”,40) (“用户界面”,“udg6”,28) 如何使用“更新查询”按顺序用这些值
id name address age
1 as re3 20
2 dg ht5 21
3 hf ujy6 23
4 ku tr5 25
这是桌子。
我想按顺序更新姓名、地址和年龄。
我有一组新值作为输入。像
(“yJ”,“ht43”,34)
(“rt”,“fd43”,36)
(“hg”,“hgd4”,40)
(“用户界面”,“udg6”,28)
如何使用“更新查询”按顺序用这些值更新行?您可以通过为现有值和新值分配行号来完成此操作。然后将此行号上的两个数据集合并,并相应更新:
WITH YourTableRanked AS
( SELECT t.*,
RowNum = ROW_NUMBER() OVER(ORDER BY ID)
FROM YourTable AS t
), NewValues AS
( SELECT t.*,
RowNum = ROW_NUMBER() OVER(ORDER BY Name)
FROM (VALUES
('yJ','ht43',34),
('rt','fd43',36),
('hg','hgd4',40),
('ui','udg6',28)
) AS t (Name, Address, Age)
)
UPDATE T
SET Name = v.Name,
Address = v.Address,
Age = v.Age
FROM YourTableRanked AS t
INNER JOIN NewValues AS v
ON v.RowNum = t.RowNum;
值得注意的是,任何类型的TOP
或排名操作都不是有效的语法,或者在缺少ORDER BY
子句的情况下不是特别有用。因此,当您提到“按顺序”更新行时,为了使“按顺序”具有任何意义,您需要定义此顺序的顺序。在我发布的查询中,我在您的新值中按Name
排序,在现有数据中按ID
排序,但您可能希望更改此项以满足您的需要
完整示例:
CREATE TABLE #T (ID INT, Name VARCHAR(2), Address VARCHAR(5), Age INT);
INSERT #T (id, name, address, age)
VALUES
(1, 'as', 're3', 20),
(2, 'dg', 'ht5', 21),
(3, 'hf', 'ujy6', 23),
(4, 'ku', 'tr5', 25);
WITH YourTableRanked AS
( SELECT t.*,
RowNum = ROW_NUMBER() OVER(ORDER BY ID)
FROM #t AS t
), NewValues AS
( SELECT t.*,
RowNum = ROW_NUMBER() OVER(ORDER BY Name)
FROM (VALUES
('yJ','ht43',34),
('rt','fd43',36),
('hg','hgd4',40),
('ui','udg6',28)
) AS t (Name, Address, Age)
)
UPDATE T
SET Name = v.Name,
Address = v.Address,
Age = v.Age
FROM YourTableRanked AS t
INNER JOIN NewValues AS v
ON v.RowNum = t.RowNum;
SELECT *
FROM #T;
DROP TABLE #T;
要更新的行数???与输入的行数相同,并且该表是一个结果集。使用TOP n。所以我可以检索任意数量的行。如果我有5组输入,我需要依次更新前5行。您可以简单地使用
更新集名称='…',年龄='…',地址='…',其中id=1
我们可以将其作为一个集进行更新吗。提供输入,如。。更新(“fsa”、“Sfsa”,40)@K9Code如果这回答了您的问题,请接受它(单击复选标记),这样其他人就不会浪费时间来解决您(已经解决)的问题。