Msg 156, Düzey 15, State 1, satır 8 anahtar kelime 'HALİNDE'Vaka Durum Ben sütun değerine dayalı sütunları katılmaya çalışıyorum sütunları
yakınında yanlış sözdizimi katılmak.
vaka durumunun 1 doğruysa
sonra ben im.ItemNumber = sol AÇIK (tr.itemnumber, len (tr.itemnumber) -4)Vaka koşul 2 gerçek ardından
ise katılmak isteyen AÇIKtr.ItemNumber = im.LegacyItemNumber başka
tr.ItemNumber = im.ItemNumber
SELECT
im.Category as RootCategory,GETDATE() AS LoadDate,tr.*
into transactionreport_stage_testNN
FROM transaction tr
LEFT OUTER JOIN ALLDW_ora.dbo.Location(NOLOCK) loc ON tr.location=loc.location
CASE
when
right(tr.itemnumber,4) = '_old' then
LEFT OUTER JOIN [Inventory](NOLOCK) im
ON im.ItemNumber = left(tr.itemnumber,len(tr.itemnumber)-4)
when
tr.itemnumber <> im.ItemNumber
then
LEFT OUTER JOIN [Inventory](NOLOCK) im
ON tr.ItemNumber = im.LegacyItemNumber
else
LEFT OUTER JOIN [Inventory](NOLOCK) im
ON tr.ItemNumber = im.itemnumber
end
AND im.Location=loc.LocationNo
[Bu] (http://stackoverflow.com/questions/ 10256848/can-i-use-case-in-a-join-condition/10260297 # 10260297) cevap bazı yardım olabilir. Eşleşme koşulunu bir 'case'de juggle edebilir, ancak sorgunun diğer bölümlerini değiştiremezsiniz, ör. masalar, nilly nilly. Yine de her şeye katılabilir ve onu bir '' '' 'olarak sıralamaya çalışabilirsiniz, fakat işlerin elden çıktığı bir noktaya varır. – HABO
Ayrıca, bu tür koşullu birleştirmelerin önerilen bir seçenek olmadığına ve hemen hemen her zaman sendika gibi başka bir yaklaşımla değiştirilebileceğine dikkat edin. Sql set bazlı işlemlerde gerçekten harika performans gösteriyor, herhangi bir yapısal kod daha da kötüye gidiyor. Bu şartlı mantık, sanki ... gibi görülebilir. Lütfen şu makaleye göz atın: https://www.simple-talk.com/sql/performance/how-to-avoid-conditional-joins-in-t-sql/ Örneğin. İnternette daha çok bulacaksınız. –