2013-02-27 28 views
7

Query:Update từ Temp Bảng

SELECT ID, T.c.value('@Address', 'nvarchar(20)') as Address 
INTO #TMP 
FROM TABLE1 
    CROSS APPLY XMLData.nodes('/Document') AS T(c) 

UPDATE TABLE1 
SET HomeAddress = (SELECT TOP 1 t.Address 
        FROM #TMP t 
        WHERE t.ID = ID) 

Chủ yếu, tôi cần phải sao chép dữ liệu OUT từ một lĩnh vực XML để lĩnh vực bình thường trong cùng một bảng.

Câu hỏi:

  1. Bất kỳ lý do tại sao tất cả các hồ sơ nhận được HomeAddress trên Table1?
  2. Thực sự là con trỏ cách duy nhất để cập nhật giá trị trên Bảng 1?
+0

trùng lặp có thể xảy ra [Cập nhật một bảng sử dụng JOIN trong SQL Server?] (Http: //stackoverflow.com/questions/1604091/update-a-table-using-join-in-sql-server) –

Trả lời

17
UPDATE T2 
SET HomeAddress = t1.address 
FROM TABLE2 t2 
join TABLE1 t1 on T1.ID = t2.HomeAddressID 
and t2.HomeAddress <> t1.address 

Sử dụng kết hợp. Không cần bảng tạm thời hoặc truy vấn con tương quan.

Nếu bảng 1 là một trong nhiều mối quan hệ, đây là một số posibilites để xử lý điều đó. Nếu bạn havea giá trị mà chỉ một và chỉ một kỷ lục (chúng tôi có một lĩnh vực trong hệ thống của chúng tôi mà chọn địa chỉ quan trọng nhất, nó được duy trì với một kích hoạt để đảm bảo uniquesness), những cố gắng này:

UPDATE T2 
SET HomeAddress = t1.address 
FROM TABLE2 t2 
join TABLE1 t1 on t1.ID = t2.HomeAddressID 
WHERE t1.somefield = 'somevalue' 
and t2.HomeAddress <> t1.address 

Nếu bạn cần phải dựa kỷ lục độc đáo trên asome lĩnh vực khác (chẳng hạn như ngày mới nhất), sau đó thử một biến thể của việc này:

UPDATE T2 
SET HomeAddress = t1.address 
FROM TABLE2 t2 
join TABLE1 t1 on t1.ID = t2.HomeAddressID 
join (select id, max(somedatefield) from table1 group by id) t3 on t3.id = t1.id 
Where t2.HomeAddress <> t1.address 
+2

Nếu t1.id có mối quan hệ một đến nhiều với t2.homeaddressid, bạn có thể cần thêm một chút cụ thể về bản ghi để sử dụng. –

+0

các giá trị thực nằm trong một trường XML. Tôi vừa cập nhật câu hỏi gốc. –

+0

@DanBracuk, điểm tuyệt vời. Tất nhiên phiên bản hiện tại không chỉ định sử dụng trong trường hợp đó. Hãy để tôi cobble lên một số ví dụ mặc dù. – HLGEM

2

trên cập nhật, tôi cần phải HOÀN TOÀN đủ điều kiện Bảng như sau:

CẬP NHẬT TABLE1
SET TABLE1.HomeAddress = (SELECT TOP 1 t.Address
TỪ #TMP t
ĐÂU t.ID = TABLE1.ID)

Các vấn đề liên quan