1

SQL Server 2005で分割関数を作成しています。SQL Server 2005で再帰テーブル値関数を使用する方法

私は既にwhileループを使用しています。

しかし、私はそれに満足していません。再帰関数を使ってやりたい

私はすでにC#で行っています。 私はSQL Server 2005でこれをプロットしていますが、コンパイルエラーが発生しています。

は、ここに私のコードです

ALTER FUNCTION [dbo].[fnSplit2] 
(

    @OLDSTRING AS VARCHAR(100), 
    @DELIMETER AS VARCHAR(1) 
) 

RETURNS @MYTABLE TABLE(COUNTER INT,STRINGVAL VARCHAR(100)) 
    AS 
     Begin 

      DECLARE @NEWSTRING AS VARCHAR(100) 
      DECLARE @POS AS INT 
      DECLARE @LEN AS INT 
      DECLARE @COUNTER AS INT 

      SET @NEWSTRING = '';   
      SET @LEN = LEN(@OLDSTRING) 
      SET @COUNTER = 0 
      SET @POS = CHARINDEX(@DELIMETER, @OLDSTRING) 

      IF(@POS > 0) 

       BEGIN 

        SET @COUNTER = @COUNTER +1 

        INSERT INTO @MYTABLE(COUNTER,STRINGVAL) VALUES(@COUNTER,@NEWSTRING + SUBSTRING(@OLDSTRING,0, @POS)) 
        SET @OLDSTRING = SUBSTRING(@OLDSTRING,0, @POS) 
        fnSplit2(@OLDSTRING,@DELIMETER); 

       END 

      ELSE 

       BEGIN 
        SET @COUNTER = @COUNTER +1 
        INSERT INTO @MYTABLE(COUNTER,STRINGVAL) values(@COUNTER,@OLDSTRING) 
       END 

    RETURN 
END 

ERRORは次のとおりです。 メッセージ102、レベル15、状態1、プロシージャfnSplit2、ライン38 付近に正しくない構文 'fnSplit2'。

SQL SERVERで再帰的なテーブル値関数を使用することはできませんか?

私はGoogleで検索し、スカラー値の再帰関数が可能であることを発見しましたか?

コードを入力すると同時に私が作っている間違いを教えてください。

何か助けてもらえますか?

+1

なぜ、反復的なバージョンから再帰的なバージョンに切り替えるのですか?したがって、メモリオーバーヘッドが増えるだけでなく、* IN * SQL SERVER>を実行していることを忘れないでください。 –

+0

要件はそうですか? 再帰CTEを使用することはできますか? 私を助けてください。 –

+1

文字列分割関数を再帰的に書く必要がありますか?まあ、私を許してください。でも、それはうんざりのようですね。 –

答えて

5

回答:

あなたは間違った方法でfnSplit2を呼んでいます。テーブル値関数はまさにそれです: "テーブル" ... "実際の"テーブルがFROM節に入る場所です。

コメント:あなたが本当に SQLでCSVを分割する必要がある場合は、それを適切に行うためにさまざまな方法でErland Sommarskog's articleを読む

。注:彼は再帰的なTVFメソッドをリストしていません。

1

また、参照のスキーマ名も "dbo.fnSplit2(..)"とする必要があります。前述のように、テーブル参照として使用します。

関連する問題