2014-10-29 82 views
-1

我是一名新的DBA我創建了一個庫存檢查存儲過程。我需要檢查已過時和庫存手頭列,並將結果影響到我的客戶表上的狀態列。這裏是我使用的代碼的一個例子。在SQL Server 2008中使用Case語句獲取狀態

 INSERT INTO dbo.tblCSSCustDeferred_TestNew 
     ([CONTACTTYPE] 
     ,[CONTACTID] 
     ,[TITLE] 
     ,[LASTNAME] 
     ,[FIRSTNAME] 
     ,[MINIT] 
     ,[ADDR1] 
     ,[ADDR2] 
     ,[CITY] 
     ,[STATE] 
     ,[ZIP] 
     ,[QTY] 
     ,[OPID] 
     ,[BENESET] 
     ,[RIDEROPTION] 
     ,[SEQNUM] 
     ,[LOB] 
     ,[FORMIDNUM] 
     ,[FORMDESCR] 
     ,[ENTITYNAME] 
     ,[ATTN] 
     ,[EMPGRPID] 
     ,[NETWORKCODE] 
     ,[BRAND] 
     ,[FormsMgmtNum] 
     ,[FormsMgmtDesc] 
     ,[Electronic] 
     ,[LetterHead] 
     ,[Envelope] 
     ,[LANGUAGE] 
     ,[JURISDICTION] 
     ,[EFFECTIVE DATE] 
     ,[Status]) 

select [CONTACTTYPE] 
     ,[CONTACTID] 
     ,[TITLE] 
     ,[LASTNAME] 
     ,[FIRSTNAME] 
     ,[MINIT] 
     ,[ADDR1] 
     ,[ADDR2] 
     ,[CITY] 
     ,[STATE] 
     ,[ZIP] 
     ,[QTY] 
     ,[OPID] 
     ,[BENESET] 
     ,[RIDEROPTION] 
     ,[SEQNUM] 
     ,[LOB] 
     ,[FORMIDNUM] 
     ,[FORMDESCR] 
     ,[ENTITYNAME] 
     ,[ATTN] 
     ,[EMPGRPID] 
     ,[NETWORKCODE] 
     ,[BRAND] 
     ,[FormsMgmtNum] 
     ,[FormsMgmtDesc] 
     ,[Electronic] 
     ,[LetterHead] 
     ,[Envelope] 
     ,[LANGUAGE] 
     ,[JURISDICTION] 
     ,[EFFECTIVE DATE] 
     CASE 
     WHEN tsg.Obsolete = 'N' THEN 'OOS' 
     When tsg.[Inventory on Hand] = '0' THEN 'OOS'  
     else 'FulFilled'     
     END 
     CASE 
     WHEN tsg.Obsolete = 'Y' THEN 'N/A' 
     When tsg.[Inventory on Hand] > 0 THEN 'Completed'  
     else 'OOS'    
     END 
     ,[Status]  
     FROM [CSSFulfillment].[dbo].[tblCSSCustUpdateTEST] cust left join 
     [CSSFulfillment].[dbo].[tmpTSGInventoryImport] tsg on 
     cust.FORMIDNUM = tsg.[Item ID] 
     END 

我的問題是這個查詢拋出了一個我找不到的語法錯誤。這裏是錯誤信息;

Msg 156,Level 15,State 1,Line 68關鍵字'CASE'附近的語法錯誤。

我已經厭倦在網上查找它,但沒有avile。真的希望有人能靠眼球來幫助我。

在此先感謝您的幫助。田野和case語句之間

+0

這裏沒有更新發生你正試圖做一個插入!!接下來哪一個被創建爲新列? – 2014-10-29 18:12:16

+0

嗨Pradeep;我的任務是將庫存表與客戶表進行比較,以查看庫存表上的列[Obsolete]是否爲'N'= no或'Y'= yes,並且列[Inventory on Hand]的值爲零或者大於零的值,並且結果會影響客戶表上​​的[狀態列],然後be.I通過左連接加入客戶表和庫存表tabl。上面的代碼給了我一個名爲'Out of Stock'的新列,它是進入[狀態]欄中的分形表中的值。 @肯懷特 - 你如何建議我標題?這裏真的是新的論壇。 – curtdugg 2014-10-29 19:57:05

+0

@KenWhite;感謝您的建議,我編輯並更改了標題。 – curtdugg 2014-10-30 20:49:47

回答

0

缺少逗號....

更新的答案。

只是運行select語句,看看它是否是ruturn的結果。 然後嘗試插入表中。請看看a,b列,並用你想要的名字替換。

INSERT INTO dbo.tblCSSCustDeferred_TestNew 
     ([CONTACTTYPE] 
     ,[CONTACTID] 
     ,[TITLE] 
     ,[LASTNAME] 
     ,[FIRSTNAME] 
     ,[MINIT] 
     ,[ADDR1] 
     ,[ADDR2] 
     ,[CITY] 
     ,[STATE] 
     ,[ZIP] 
     ,[QTY] 
     ,[OPID] 
     ,[BENESET] 
     ,[RIDEROPTION] 
     ,[SEQNUM] 
     ,[LOB] 
     ,[FORMIDNUM] 
     ,[FORMDESCR] 
     ,[ENTITYNAME] 
     ,[ATTN] 
     ,[EMPGRPID] 
     ,[NETWORKCODE] 
     ,[BRAND] 
     ,[FormsMgmtNum] 
     ,[FormsMgmtDesc] 
     ,[Electronic] 
     ,[LetterHead] 
     ,[Envelope] 
     ,[LANGUAGE] 
     ,[JURISDICTION] 
     ,[EFFECTIVE DATE], a, b -- replace a and b with your column 
     ,[Status]) 

select [CONTACTTYPE] 
     ,[CONTACTID] 
     ,[TITLE] 
     ,[LASTNAME] 
     ,[FIRSTNAME] 
     ,[MINIT] 
     ,[ADDR1] 
     ,[ADDR2] 
     ,[CITY] 
     ,[STATE] 
     ,[ZIP] 
     ,[QTY] 
     ,[OPID] 
     ,[BENESET] 
     ,[RIDEROPTION] 
     ,[SEQNUM] 
     ,[LOB] 
     ,[FORMIDNUM] 
     ,[FORMDESCR] 
     ,[ENTITYNAME] 
     ,[ATTN] 
     ,[EMPGRPID] 
     ,[NETWORKCODE] 
     ,[BRAND] 
     ,[FormsMgmtNum] 
     ,[FormsMgmtDesc] 
     ,[Electronic] 
     ,[LetterHead] 
     ,[Envelope] 
     ,[LANGUAGE] 
     ,[JURISDICTION] 
     ,[EFFECTIVE DATE] 
     , CASE 
     WHEN tsg.Obsolete = 'N' THEN 'OOS' 
     When tsg.[Inventory on Hand] = '0' THEN 'OOS'  
     else 'FulFilled'     
     END 
     , CASE 
     WHEN tsg.Obsolete = 'Y' THEN 'N/A' 
     When tsg.[Inventory on Hand] > 0 THEN 'Completed'  
     else 'OOS'    
     END 
     ,[Status]  
     FROM [CSSFulfillment].[dbo].[tblCSSCustUpdateTEST] cust left join 
     [CSSFulfillment].[dbo].[tmpTSGInventoryImport] tsg on 
     cust.FORMIDNUM = tsg.[Item ID] 
+0

@ Hiten004--我試過了您的建議,但仍然收到此錯誤消息Msg 156,Level 15,State 1,Line 72關鍵字'CASE'附近的語法錯誤。 – curtdugg 2014-10-31 19:41:51