2012-01-30 45 views
1

下面的代碼我用於MSSQL 2005,但是當我嘗試在MSSQL 2000中運行時,我得到了低於erros。分割功能獲取錯誤

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 
    ) 

在此先感謝

回答

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 

希望這有助於!

1

CTE的 - IE 「WITH」 的特徵在2005年SQL 2000不適開始......