我想将存储在名称-值对数据中的表转换为 SQL Server 2008 中的关系形式。
源表
Strings
ID Type String
100 1 John
100 2 Milton
101 1 Johny
101 2 Gaddar
需要目标
Customers
ID FirstName LastName
100 John Milton
101 Johny Gaddar
我遵循下面给出的策略,
使用字符串表中的 ID 值填充客户表
INSERT INTO CUSTOMERS SELECT DISTINCT ID FROM Strings
你得到以下
Customers
ID FirstName LastName
100 NULL NULL
101 NULL NULL
通过使用 ID 列将客户连接到字符串来更新客户的其余属性。这样,客户中的每条记录都会有对应的 2 条匹配记录。
UPDATE Customers
SET FirstName = (CASE WHEN S.Type=1 THEN S.String ELSE FirstName)
LastName = (CASE WHEN S.Type=2 THEN S.String ELSE LastName)
FROM Customers
INNER JOIN Strings ON Customers.ID=Strings.ID
一个中间状态就像,
ID FirstName LastName ID Type String
100 John NULL 100 1 John
100 NULL Milton 100 2 Milton
101 Johny NULL 101 1 Johny
101 NULL Gaddar 101 2 Gaddar
但这并没有按预期工作。因为在SET
子句中分配值时,它只设置已提交的值而不是未提交的值。无论如何在UPDATE
语句中设置未提交的值(在查询的处理时间内)?
PS: I am not looking for alternate solutions but make my approach work by telling SQL Server to use uncommitted data for UPDATE
.