-1

我正在尝试为我们的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”附近的语法不正确。

在上面的星号处。

我错过了什么?

4

2 回答 2

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)
...
于 2013-01-07T21:32:33.347 回答
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

于 2013-01-07T21:33:40.627 回答