我是一名新的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語句之間
這裏沒有更新發生你正試圖做一個插入!!接下來哪一個被創建爲新列? – 2014-10-29 18:12:16
嗨Pradeep;我的任務是將庫存表與客戶表進行比較,以查看庫存表上的列[Obsolete]是否爲'N'= no或'Y'= yes,並且列[Inventory on Hand]的值爲零或者大於零的值,並且結果會影響客戶表上的[狀態列],然後be.I通過左連接加入客戶表和庫存表tabl。上面的代碼給了我一個名爲'Out of Stock'的新列,它是進入[狀態]欄中的分形表中的值。 @肯懷特 - 你如何建議我標題?這裏真的是新的論壇。 – curtdugg 2014-10-29 19:57:05
@KenWhite;感謝您的建議,我編輯並更改了標題。 – curtdugg 2014-10-30 20:49:47