2012-01-30 8 views
1

以下のコード私は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 
    ) 

おかげ

答えて

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の - 機能は、2000年には利用できませんSQL 2005年に開始されている "WITH" IE ...

1

あなたはCTEの(Common Table ExpressionsからWITH)を使用することはできませんでSQLをSQL Server 2005で導入されました。

+0

解決策は何ですか? – Sree

関連する問題