1

私はテーブルを持っています

CREATE TABLE [StudentsByKindergarten]
(
    [FK_KindergartenId] [int] IDENTITY(1,1) NOT NULL,
    [StudentList] [nvarchar]
)

エントリがある場所

(1, "John, Alex, Sarah")
(2, "")
(3, "Jonny")
(4, "John, Alex")

この情報を次の表に移行したいと考えています。

CREATE TABLE [KindergartenStudents]
(
    [FK_KindergartenId] [int] NOT NULL,
    [StudentName] [nvarchar] NOT NULL)
)

それが持つように

(1, "John")
(1, "Alex")
(1, "Sarah")
(3, "Jonny")
(4, "John")
(4, "Alex")

ここでの答えのようなものを使用して分割機能を実現できると思います: How do I split a string so I can access item x?

ここで関数を使用する:

http://www.codeproject.com/Articles/7938/SQL-User-Defined-Function-to-Parse-a-Delimited-Str

私はこのようなことをすることができます、

INSERT INTO [KindergartenStudents] ([FK_KindergartenId], [Studentname])
    SELECT 
        sbk.FK_KindergartenId,
        parsed.txt_value
    FROM 
        [StudentsByKindergarten] sbk, dbo.fn_ParseText2Table(sbk.StudentList,',') parsed
GO

しかし、うまくいかないようです。

4

2 に答える 2

0

あなたが提案した関数 ( fn_ParseText2Table ) を使用しましたが、次の T-SQL が機能しています。このフィドルでテストできます: link

BEGIN
  DECLARE 
    @ID int, 
    @iterations int

  -- Iterate the number of not empty rows
  SET @iterations = 
        (SELECT 
          COUNT(*) 
        FROM
          StudentsByKindergarten
        WHERE
          DATALENGTH(StudentList) > 0
        )

  WHILE ( @iterations > 0 )

  BEGIN

    -- Select the ID of row_number() = @iteration
    SET @ID =
          (SELECT 
            FK_KindergartenId 
          FROM
            (SELECT 
              *,
              ROW_NUMBER() OVER (ORDER BY FK_KindergartenId DESC) as rn
            FROM 
              StudentsByKindergarten
            WHERE
              DATALENGTH(StudentList) > 0) rows
          WHERE
              rows.rn = @iterations
          )

    SET @iterations -= 1

    -- Insert the parsed values
    INSERT INTO KindergartenStudents
      (FK_KindergartenId, StudentName)
    SELECT
      @ID,
      parsed.txt_value
    FROM
      fn_ParseText2Table
    (
      (SELECT
        StudentList
      FROM
        StudentsByKindergarten
      WHERE
        FK_KindergartenId = @ID), 
    ',') parsed
    END
END
于 2014-09-13T00:12:11.433 に答える