Ssrs
使用“case 語法”的更新語句無法更新臨時表中的特定列
查看目前 SSRS 遷移的儲存過程。我注意到下面列出的臨時表 (#tempShip) 的 case 語法對臨時表中的“ord_status”列沒有影響。為臨時表收集數據的儲存過程相當龐大,因此我將避免發布。但我相信通過為更新提供的程式碼它可能會提供一些理由。
問題:
- 您可以利用臨時表上的 case 語句作為更新嗎?
- 除了案例陳述之外,我還應該嘗試另一種方法嗎?(我不認為使用帶有“IF”或“WHERE EXISTS with a select statement”的子查詢會對此有所幫助)
筆記:
***儲存過程執行沒有任何錯誤,臨時表按預期填充數據(但使用 case 語句更新沒有預期結果)
***通過做一個簡單的案例陳述,如下所示,翻譯發生得很好
用於測試臨時表中 ord_status 數據的案例轉換的基本查詢。輸出正確
select ord_status, CASE WHEN RTRIM([ord_status]) = 'N' THEN 'New' WHEN RTRIM([ord_status]) = 'Q' THEN 'Printed' WHEN RTRIM([ord_status]) = 'P' THEN 'Picked' ELSE '' END from #tempShip
***正在更新臨時表的儲存過程結束
UPDATE [#tempShip] SET [#tempShip].[DUP] = 1, [#tempShip].[ord_status] = CASE WHEN RTRIM([ord_status]) = 'N' THEN 'New' WHEN RTRIM([ord_status]) = 'Q' THEN 'Printed' WHEN RTRIM([ord_status]) = 'P' THEN 'Picked' ELSE '' END FROM #tempShip INNER JOIN ( SELECT X.order_N_ext, COUNT(X.order_N_ext) AS dup FROM #tempShip AS X GROUP BY X.order_N_ext ) AS Y ON #tempShip.order_N_ext = Y.order_N_ext WHERE Y.dup > 1; ----- -- mbs 3/30/2017 #22844 - add parameter @ship_type SELECT * FROM #tempShip WHERE ship_type LIKE @ship_type -------<<< END DROP TABLE #tempShip
**order_N_ext
SELECT O.order_no , O.ext , CONVERT(varchar(20), O.order_no) + ' - ' + CONVERT(varchar(2), O.ext) AS 'order_N_ext'
數據範例:
Ord_Num BD order_N_ext Loc Cust Ship_date Ord_Status 1252868 1 1252868 - 1 RAS HQ 21115 2017-04-19 00:00:00.000 2570.63 P 1253995 1 1253995 - 1 RAS HQ 11471 2017-04-19 00:00:00.000 1270.45 Q 1254526 0 1254526 - 0 RAS HQ 24104 2017-04-19 00:00:00.000 2214.67 P
這是解決方案:(更新語句必須重新排列,以便它們自己執行。)
UPDATE [#tempShip] SET [ord_status] = CASE WHEN RTRIM([ord_status]) = 'N' THEN 'New' WHEN RTRIM([ord_status]) = 'Q' THEN 'Printed' WHEN RTRIM([ord_status]) = 'P' THEN 'Picked' ELSE '' END UPDATE [#tempShip] SET [#tempShip].[DUP] = 1 FROM #tempShip INNER JOIN ( SELECT X.order_N_ext, COUNT(X.order_N_ext) AS dup FROM #tempShip AS X GROUP BY X.order_N_ext ) AS Y ON #tempShip.order_N_ext = Y.order_N_ext WHERE Y.dup > 1; ----- -- mbs 3/30/2017 #22844 - add parameter @ship_type SELECT * FROM #tempShip WHERE ship_type LIKE @ship_type -------<<<