2013-01-07 45 views
-1

我試圖寫一個函數爲我們的SQL Server 2000,我可以在其他存儲過程中使用來清理我們的機器ID號:T-SQL CASE函數

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- Description: The Purpose here is to just get the System (Chamber, Decay, Label, Tubing, etc.) 
-- ============================================= 
CREATE FUNCTION [dbo].[fn_GetSysType] (@systemID varchar(50)) RETURNS varchar(50) AS 
BEGIN 
    declare @sysID varchar(50) 
    set @sysID=LTrim(RTrim(@systemID)) 
    if (0<Len(@sysID)) begin 
    set @sysID=(
     case when (0<CharIndex('Inspect', @sysID)) then 'Inspect' 
*  case when (0<CharIndex('Label', @sysID)) then 'Label' 
     case when (0<CharIndex('Tubing', @sysID)) then 'Tubing' 
     case when (0<CharIndex('Expand', @sysID)) then 'Expand' 
     case when (0<CharIndex('Decay', @sysID)) then 'Decay' 
     case when (0<CharIndex('Chamber', @sysID)) then 'Chamber' 
     case when (0<CharIndex('Water', @sysID)) then 'Water' 
     case when (0<CharIndex('Sniff', @sysID)) then 'Sniff' 
     case when (0<CharIndex('Packout', @sysID)) then 'Packout' 
     case when (0<CharIndex('Shipping', @sysID)) then 'Shipping' 
     else 'Unknown' end) 
    end 
    return @sysID 
END 
GO 

錯誤消息時我試圖保存這是:

關鍵字'大小寫'附近的語法不正確。

上面的星號。

我錯過了什麼?

+0

你有沒有檢討[文件](http://msdn.microsoft.com/en-us/library /aa258235(v=sql.80).aspx)CASE語句? – Pondlife

+0

哦,我做到了。很明顯,我不能很好地閱讀。 – jp2code

回答

4

您只需要使用CASE一次。

... 
set @sysID=(
    case when (0<CharIndex('Inspect', @sysID)) then 'Inspect' 
     when (0<CharIndex('Label', @sysID)) then 'Label' 
     when (0<CharIndex('Tubing', @sysID)) then 'Tubing' 
     when (0<CharIndex('Expand', @sysID)) then 'Expand' 
     when (0<CharIndex('Decay', @sysID)) then 'Decay' 
     when (0<CharIndex('Chamber', @sysID)) then 'Chamber' 
     when (0<CharIndex('Water', @sysID)) then 'Water' 
     when (0<CharIndex('Sniff', @sysID)) then 'Sniff' 
     when (0<CharIndex('Packout', @sysID)) then 'Packout' 
     when (0<CharIndex('Shipping', @sysID)) then 'Shipping' 
    else 'Unknown' end) 
... 
+0

謝謝!現在,如何獎勵...? – jp2code

+1

@ jp2code [此鏈接](http://meta.stackexchange.com/a/5235/195035)將告訴你如何接受答案。 – Kermit

+0

哈哈 - 是的,我得到了那一個。 :) – jp2code

2

的情況下,SQL Server語法是:

set @sysID=(
     case when (0<CharIndex('Inspect', @sysID)) then 'Inspect' 
      when (0<CharIndex('Label', @sysID)) then 'Label' 
      when (0<CharIndex('Tubing', @sysID)) then 'Tubing' 
      when (0<CharIndex('Expand', @sysID)) then 'Expand' 
      when (0<CharIndex('Decay', @sysID)) then 'Decay' 
      when (0<CharIndex('Chamber', @sysID)) then 'Chamber' 
      when (0<CharIndex('Water', @sysID)) then 'Water' 
      when (0<CharIndex('Sniff', @sysID)) then 'Sniff' 
      when (0<CharIndex('Packout', @sysID)) then 'Packout' 
      when (0<CharIndex('Shipping', @sysID)) then 'Shipping' 
     else 'Unknown' end) 

http://msdn.microsoft.com/en-us/library/ms181765.aspx

+0

唉!這就是我正在研究編寫代碼的MSDN頁面! – jp2code