sql >> データベース >  >> RDS >> Sqlserver

区切られた列を別のテーブルに分割するための効率的なクエリ

    分割関数を作成します:

    CREATE FUNCTION dbo.SplitStrings(@List NVARCHAR(MAX))
    RETURNS TABLE
    AS
       RETURN ( SELECT Item FROM
           ( SELECT Item = x.i.value('(./text())[1]', 'nvarchar(max)')
             FROM ( SELECT [XML] = CONVERT(XML, '<i>'
             + REPLACE(@List, '.', '</i><i>') + '</i>').query('.')
               ) AS a CROSS APPLY [XML].nodes('i') AS x(i) ) AS y
           WHERE Item IS NOT NULL
       );
    GO
    

    次に、すべてのカーソルとループするナンセンスを取り除き、これを実行します。

    INSERT dbo.mrhierlookup
    (
      heiraui,
      aui
    )
    SELECT s.Item, m.aui
      FROM dbo.mrhier3 AS m
      CROSS APPLY dbo.SplitStrings(m.ptr) AS s
    GROUP BY s.Item, m.aui;
    



    1. 日付間のLaravel$q-> where()

    2. カスケード削除制約を追加するにはどうすればよいですか?

    3. MySQLで最も一致する行を見つける(InnoDB)

    4. 構造にアクセスして、refcursorの列リスト、データ型を取得するにはどうすればよいですか?