Sql server SQL Server-向列中的每一行插入XML

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

我有两张桌子

Customer CustomerID int,名称varchar20,OrderHistory xml 订单OrderID int、CustomerID int、OrderDate 我想在OrderHistory列的每一行中插入该客户基于CustomerID的OrderDate

我的问题是:

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,假设客户编号没有间隔,最后不必要地使用循环。这里还有很多更好的建议——向他们学习是个好主意。