【问题标题】:Split function getting error拆分函数出错
【发布时间】:2012-01-30 20:51:48
【问题描述】:

下面的代码我用于 MSSQL 2005,但是当我尝试在 MSSQL 2000 中运行时,我遇到了错误。

Msg 156, Level 15, State 1, Procedure StrSplit, Line 5
Incorrect syntax near the keyword 'WITH'.
Msg 170, Level 15, State 1, Procedure StrSplit, Line 15
Line 15: Incorrect syntax near ')'.

CREATE FUNCTION dbo.StrSplit (@sep char(1), @s varchar(512))  
    RETURNS table  
    AS  
    RETURN (  
        WITH Pieces(pn, start, stop) AS (  
          SELECT 1, 1, CHARINDEX(@sep, @s)  
          UNION ALL  
          SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)  
          FROM Pieces  
          WHERE stop > 0  
        )  
        SELECT pn,  
          SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s  
        FROM Pieces  
      )

提前致谢

【问题讨论】:

    标签: sql-server sql-server-2005 sql-server-2000


    【解决方案1】:

    使用下面的函数代替它。

    CREATE  FUNCTION [dbo].[fn_Split](@text VARCHAR(8000), @delimiter VARCHAR(20) = ' ')
    RETURNS @Strings TABLE
    (    
      position int IDENTITY PRIMARY KEY,
      value varchar(8000)   
    )
    AS
    
    BEGIN
    DECLARE @index int 
    
    SET @text = LTRIM(RTRIM(@text))
    
    SET @index = -1 
    WHILE (LEN(@text) > 0) 
     BEGIN  
        SET @index = CHARINDEX(@delimiter , @text)  
        IF (@index = 0) AND (LEN(@text) > 0)  
          BEGIN   
            INSERT INTO @Strings VALUES (@text)
              BREAK  
          END  
        IF (@index > 1)  
          BEGIN   
            INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))   
            SET @text = RIGHT(@text, (LEN(@text) - @index))  
          END  
        ELSE 
          SET @text = RIGHT(@text, (LEN(@text) - @index)) 
        END
      RETURN
    END
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      CTE's - IE "WITH" 是从 sql 2005 开始的一项功能。在 2000 年不可用...

      【讨论】:

        【解决方案3】:

        您不能在 SQL Server 2000 中使用 CTE (Common Table Expressions - WITH)。它们是在 SQL Server 2005 中引入的。

        【讨论】:

          猜你喜欢
          • 2014-03-05
          • 2019-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-06
          • 1970-01-01
          • 1970-01-01
          • 2020-08-26
          相关资源
          最近更新 更多