SQLServer覚書 カンマ区切り文字列→行データ

カンマ区切りのデータを縦に並べるプロシージャを作ってみた。


CREATE PROCEDURE csvToRows
    @csv VARCHAR(MAX)
AS
BEGIN

    DECLARE @exit_flg       TINYINT       = 0
    DECLARE @i              INT           = 1
    DECLARE @imax           INT
    DECLARE @buf            VARCHAR(MAX)
        
    BEGIN TRY
        -- はじめにNULLや空白を回避
        IF RTRIM(LTRIM(ISNULL(@csv,'')))='' 
        BEGIN
            RAISERROR (N'NULLはダメ!', 18, 1)
        END

        CREATE TABLE #w_temp (
            buf            VARCHAR(MAX)
        )
        
        SET @buf = @csv
        WHILE @exit_flg = 0
        BEGIN
            SET @buf = SUBSTRING(@buf, @i  , LEN(@buf))
            SET @imax = CHARINDEX(',', @buf)
            IF @imax = 0
            BEGIN
                INSERT INTO #w_temp
                SELECT SUBSTRING(@buf, 1, LEN(@buf)) 
                SET @exit_flg = 1
            END
            ELSE
            BEGIN
                INSERT INTO #w_temp
                SELECT SUBSTRING(@buf, 1, @imax - 1) 
                SET @i = @imax + 1
            END
        END
        SELECT 'OK' AS result, NULL AS err_msg, buf FROM #w_temp

    END TRY
    BEGIN CATCH
        
        SELECT 'NG' AS result, ERROR_MESSAGE() AS err_msg
        
    END CATCH
END

Add a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください