2012-03-30 5 views
1

T-SQLでは、TEXTの値を改行文字で区切り、各行にループする必要があります。TEXTブロックを新しい行で区切る

つまり、私はexplode()関数が必要ですが、T-SQLでは各行にループする必要があります。

新しいテンポラリテーブルを作成し、このテーブルの文字列の行を行として保存してから、カーソルでこれをループするのは大変です。私は文字列をどのように分割するかについては分かりません。

T-SQLでこれを行う簡単な方法はありますか?

+1

をしてTSQLを入れないでくださいタイトル、つまり、タグの内容は –

+0

、SQL Serverのバージョンは? –

+0

MSSQL 2000を使用しています。タグを編集します。 –

答えて

3

(私はあなたのデータは4000 caractersより大きいだろうはず。)

にスプリット機能:

CREATE FUNCTION dbo.Split 
(
    @RowData nvarchar(2000), 
    @SplitOn nvarchar(5) 
) 
RETURNS @RtnValue table 
(
    Id int identity(1,1), 
    Data nvarchar(2000) 
) 
AS 
BEGIN 
    Declare @Cnt int 
    Set @Cnt = 1 

    While (Charindex(@SplitOn,@RowData)>0) 
    Begin 
     Insert Into @RtnValue (data) 
     Select 
      Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1))) 

     Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData)) 
     Set @Cnt = @Cnt + 1 
    End 

    Insert Into @RtnValue (data) 
    Select Data = ltrim(rtrim(@RowData)) 

    Return 
END 

そして爆発機能:

CREATE FUNCTION dbo.*tableName*_Explode 
(
    @id int 
) 
RETURNS @RtnValue table 
(
    Id int, 
    Data NVARCHAR(2000) 
) 
AS 
BEGIN 
    DECLARE @LINEBREAK AS varchar(2) 
    SET @LINEBREAK = CHAR(13) + CHAR(10) 

    DECLARE @short_text NVARCHAR(2000) 
    DECLARE @short_text_length INT 

    DECLARE @sub_length INT 
    SET @sub_length = 2000 
    DECLARE @sub_index INT 
    SET @sub_index = 1 


BEGIN 
    SET @short_text = (select SUBSTRING(*tableData*,@sub_index,@sub_length) from *tableName* WHERE id = @id) 
    SET @short_text_length = DATALENGTH(@short_text) 

      WHILE (@short_text_length > 0) 
    BEGIN 
     Insert Into @RtnValue (id,data) 
     SELECT @id, @short_text 

     SET @sub_index = (@sub_index + @sub_length) 
     SET @short_text = (select SUBSTRING(*tableData*,@sub_index,@sub_length) from *tableName* WHERE id = @id) 
     SET @short_text_length = DATALENGTH(@short_text) 
    END 

    IF (SELECT COUNT(*) FROM @RtnValue) = 0 
     Insert Into @RtnValue (id,data) 
     SELECT @id, '' 
    END 

    RETURN 
END 
関連する問題