1
我花了一些代码,这应该是工作和看到的desinged它不工作,我 坦率地挣扎着爬什么是错的,我需要填写的所有篮筐,但现在只有第一次得到填补,我是否需要做任何支点?或通过选择摆脱更新? Id'like有相同的5行的Tx,并填写所有篮ALL TxID添加,这个自含以下例子可以说明这一点:与TSQL更新选择加入的问题
SELECT * INTO #lkup FROM ( -- drop table #lkup -- select * from #lkup
SELECT 201 Cust_ID, 1 Line, 'Pr1' ProductID UNION
SELECT 201 Cust_ID, 2 Line, 'Pr20' ProductID UNION
SELECT 201 Cust_ID, 3 Line, 'Pr333' ProductID ) g
SELECT * INTO #tx FROM ( -- drop table #tx -- select * from #tx
SELECT 201 Cust_ID, cast (NULL AS varchar(7)) Prod1, cast (NULL AS varchar(7)) Prod2, cast (NULL AS varchar(7)) Prod3 , 12001 TxID UNION
SELECT 201 Cust_ID, cast (NULL AS varchar(7)) Prod1, cast (NULL AS varchar(7)) Prod2, cast (NULL AS varchar(7)) Prod3 , 12002 TxID UNION
SELECT 201 Cust_ID, cast (NULL AS varchar(7)) Prod1, cast (NULL AS varchar(7)) Prod2, cast (NULL AS varchar(7)) Prod3 , 12003 TxID UNION
SELECT 201 Cust_ID, cast (NULL AS varchar(7)) Prod1, cast (NULL AS varchar(7)) Prod2, cast (NULL AS varchar(7)) Prod3 , 12004 TxID UNION
SELECT 201 Cust_ID, cast (NULL AS varchar(7)) Prod1, cast (NULL AS varchar(7)) Prod2, cast (NULL AS varchar(7)) Prod3 , 12005 TxID ) g
UPDATE tx
SET Prod1 = CASE WHEN LINE =1 THEN ProductID END,
Prod2 = CASE WHEN LINE =2 THEN ProductID END,
Prod3 = CASE WHEN LINE =3 THEN ProductID END
--- SELECT l.Line, l.ProductID, tx.*
FROM #tx tx
JOIN #lkup l ON l.Cust_ID = tx.Cust_ID
SELECT * FROM #tx -- update #tx set Prod1 = ' ', Prod2 = ' ', Prod3 = ' '
SELECT 'Shouldbe' , '201' CustID, 'Pr1' Prod1, 'Pr20' Prod1, 'Pr333' Prod1, 12001 TxID -- for each Tx 5 rows Total
引人入胜。它可能是未定义的(或不确定的)行为。尝试用'RIGHT JOIN'替换更新语句的'JOIN',看看会发生什么。你可以用子查询重写'CASE'东西到'#lkup'吗? – dlatikay
Tx我尝试使用(选择)括号而不是案例,它并没有采取它,可能b'z UPDATE语法。与RIGHT JOIN它现在捕获Prod1和Prod3,但仍然不是Prod2(?)。 –
更正:这实际上有效,但将是我最后的手段,我也有人y篮子,并在真正的设置我嵌套选择JOIN。 UPDATE #tx SET#tx.Prod1 = –