Sql server SQL Server-向列中的每一行插入XML
我有两张桌子 Customer CustomerID int,名称varchar20,OrderHistory xml 订单OrderID int、CustomerID int、OrderDate 我想在OrderHistory列的每一行中插入该客户基于CustomerID的OrderDate 我的问题是:Sql server SQL Server-向列中的每一行插入XML,sql-server,xml,Sql Server,Xml,我有两张桌子 Customer CustomerID int,名称varchar20,OrderHistory xml 订单OrderID int、CustomerID int、OrderDate 我想在OrderHistory列的每一行中插入该客户基于CustomerID的OrderDate 我的问题是: UPDATE Customer SET OrderHistory = (SELECT OrderDate FROM Order
UPDATE Customer
SET OrderHistory = (SELECT OrderDate
FROM Order
WHERE CustomerID = 1
FOR XML AUTO)
WHERE CustomerID = 1
但是,我必须为每个新客户更改CustomerID。是否有任何方法可以一次插入每个客户?要使用“连接另一个表”更新表,请使用下一种方法:
UPDATE A
SET foo = B.bar
FROM TableA A
JOIN TableB B
ON A.col1 = B.colx
WHERE ...
因此,更新查询如下所示:
UPDATE A
SET OrderHistory = B.OrderDate
FROM Customer A
JOIN Order B
ON A.CustomerID = B.CustomerID
我刚刚发现:
DECLARE
@count int
SET
@count = 0
UPDATE Customer
WHILE @count < (SELECT COUNT (*) FROM Customer)
BEGIN
SET OrderHistory = (SELECT
OrderDate
FROM
Order
WHERE CustomerID = @count
FOR XML AUTO)
WHERE CustomerID = @count
SET @count = @count + 1
END
正在应用更新。。。从…起构造初始SQL以使其一次更新所有客户数据应该很简单:
UPDATE Customer
SET OrderHistory =
(SELECT OrderDate
FROM Order o
WHERE o.CustomerID = c.CustomerID
FOR XML AUTO)
FROM Customer c
慢,因为您正在循环中运行select count,假设客户编号没有间隔,最后不必要地使用循环。这里还有很多更好的建议——向他们学习是个好主意。