Chúng tôi có một số quy trình được lưu trữ được BizTalk sử dụng để tìm nạp n hàng từ hàng đợi (và bảng đã tham gia) và cập nhật trạng thái của các mục đó cùng một lúc.Có thể UPDATE và SELECT trong câu lệnh đơn sử dụng mệnh đề OUTPUT với CTE chứa JOIN?
Tôi đang cố gắng sửa đổi các truy vấn này để loại bỏ việc sử dụng các biến bảng và thay vào đó thực hiện công việc trong một câu lệnh. Tôi đã thành công với một số, nhưng ví dụ cụ thể này là khó khăn bởi vì có một join
trong CTE, và tôi muốn trả lại một số cột đã tham gia mặc dù chúng không phải là một phần của update
.
Đây là những gì tôi đã đưa ra:
;with q as
(
select top (@FetchCount)
iq.InQueueId,
itk.[Message],
iq.PatNo,
iq.DistrictNo,
itk.Interaction,
iq.[Status]
from
InQueue iq
join Itk on iq.InQueueId = itk.InQueueId
join [Endpoint] e on iq.[Endpoint] = e.EndpointId
join EndpointName en on en.EndpointNameId = e.Name
where
en.Name = 'XYZ'
and iq.[Status] = @StatusNew
order by
iq.InQueueId
)
update
q
set
[Status] = @StatusSelected
output
inserted.InQueueId as [Id],
inserted.[Message] as [Msg],
inserted.DistrictNo,
inserted.Interaction
này ngay lập tức không thành công với các lỗi sau:
The column reference "inserted.Message" is not allowed because it refers to a base table that is not being modified in this statement.
Rõ ràng điều này là vì các cột nhắn và Interaction không thể được trả về như một phần của tập hợp inserted
, vì chúng nằm trong một bảng khác và do đó không được cập nhật.
Vì vậy, tôi đã cố gắng để thay đổi output
khoản để:
output
inserted.InQueueId as [Id],
q.[Message] as [Msg],
inserted.DistrictNo,
q.Interaction
này không thành công với các lỗi:
The multi-part identifier "q.Message" could not be bound.
Có thể đạt được điều này mà không cần viết lại các truy vấn để sử dụng một trong hai bảng tạm thời hoặc biến bảng?
Cảm ơn, đó là một điều tôi không thử! Tôi nghĩ rằng họ thực sự có thể cải thiện lựa chọn từ khóa ở đây; nó không có vẻ hợp lý khi nhìn vào tập 'xóa' cho các giá trị không thay đổi. –
Đây chính xác là những gì tôi cần để giải quyết một vấn đề mà tôi gặp phải. Tôi ước tôi có thể +10 câu trả lời này. – Brandon