Tôi cần cập nhật trường GroupID thành 0. Tôi đã tìm ra cách truy xuất giá trị, hiện tại tôi đang gặp sự cố khi cập nhật nó.Cập nhật giá trị nút XML trong SQL Server
Bất kỳ trợ giúp nào sẽ tuyệt vời!
<ProblemProfile>
<GroupID>-1</GroupID>
<LayoutID>1</LayoutID>
<MyQueries>false</MyQueries>
</ProblemProfile>
Declare @Result xml
set @Result = convert(xml,(select ProfileXML from profiles where id = 23))
SELECT x.value('.', 'int') ID
FROM @Result.nodes('/ProblemProfile/GroupID') as R(x)
Cập nhật
Những gì tôi cần làm bây giờ là cập nhật groupId mỗi hàng duy nhất của có giá trị của 'foo'
declare @foo int
set @foo = -1
UPDATE profiles
SET ProfileXML.modify('replace value of (/ProblemProfile/GroupID/text())[1] with "0"')
WHERE ProfileXML.value('(/ProblemProfile/GroupID)[1]', 'int') = @foo
này chỉ được cập nhật hàng đầu tiên đáp ứng tiêu chí này. Tôi cập nhật mỗi hàng như thế nào?
Cập nhật 2 Tuyên bố đó hoạt động. Hóa ra cấu trúc cơ sở dữ liệu cho nút đầu tiên có thể khác nhau. Một //GroupID ...etc đơn giản được cập nhật mỗi hàng. Nó luôn luôn là những điều nhỏ bé ngu ngốc mà đi chúng tôi lên haha.
Thực tế việc sử dụng các nút() và các giá trị() là một thực hành tốt. Trong trường hợp này không tạo ra bất kỳ sự khác biệt nào, nhưng nếu nhiều cột được truy vấn thì tốt hơn khi sử dụng các nút(): "Sự kết hợp của các phương thức node() và value() có thể hiệu quả hơn trong việc tạo ra các rowset khi nó có một vài cột "http://technet.microsoft.com/en-us/library/ms187508(SQL.90).aspx –
@Remus: vâng, điểm tốt - nếu bạn cần nhiều giá trị, sử dụng các nút() có ý nghĩa tổng thể, tôi đồng ý . –
Tuyệt vời. chỉ là những gì tôi cần. –