T-SQL案例功能

时间:2013-01-07 21:25:46

标签: sql-server sql-server-2000

我正在尝试为 SQL Server 2000 编写一个函数,我可以在其他存储过程中使用它来清理我们的计算机ID号:

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

我尝试保存时的错误消息是:

  

关键字“case”附近的语法不正确。

在上面的星号。

我错过了什么?

2 个答案:

答案 0 :(得分: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)
...

答案 1 :(得分: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