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

T-SQL:ID列を持つCTE

    生成されたIDをCTEでキャプチャすることはできません。ただし、nullを使用して、すべての行をターゲットテーブルに挿入できます。 ParentIDとして 次に、ParentIDを更新します 別の更新ステートメントで。これを行うには、mergeを使用できます ここ

    -- Helper table to map new id's from source
    -- against newly created id's in target
    declare @IDs table
    ( 
      TargetID int,
      SourceID int,
      SourceParentID int
    )
    
    -- Use merge to capture generated id's
    merge BillOfMaterials as T
    using SourceTable as S
    on 1 = 0
    when not matched then
    insert (SomeColumn) values(SomeColumn)
    output inserted.BomId, S.BomID, S.ParentID into @IDs;
    
    -- Update the parent id with the new id
    update T
    set ParentID = I2.TargetID
    from BillOfMaterials as T
      inner join @IDs as I1
        on T.BomID = I1.TargetID
      inner join @IDs as I2
        on I1.SourceParentID = I2.SourceID
    

    これは、SE-Data の完全な動作サンプルです。



    1. EF6-並列クエリを正しく実行する方法

    2. DjangoをSQLiteからPostgreSQLに変換する

    3. 秒をyyyy-mm-ddhh:mm:ssPostgreSQLに変換します

    4. MySQLストアドプロシージャを呼び出すときにパケットの順序が正しくないエラー