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

SQL - レコードとその子孫を複製する

    Martin が提案したように、IDENTITY_INSERT を有効にする必要があります。 独自の ID 値をプッシュできるようにします。 Max( Id ) が正しい値を返すようにするために、テーブル ロックを取得する必要がある場合もあります。

    If object_id('tempdb..#TestData') is not null
        Drop Table #TestData
    GO
    Create Table #TestData
        (
        Id int not null identity(1,1) Primary Key
        , ParentId int not null
        , Name varchar(50) not null
        )
    GO
    Set Identity_Insert #TestData On
    GO  
    Insert #TestData( Id, ParentId, Name )
    Values( 1,0,'Food' )
        , ( 2,1,'Taste' )
        , ( 3,1,'Price' )
        , ( 4,2,'Taste Requirement' );
    
    
    With Data As
        (
        Select Cast(MaxId.Id + 1 As int) As Id
            , T.ParentId
            , 'Copy Of ' + T.name As Name
            , T.Id As OldId
            , 0 As OldParentId
        From #TestData As T
            Cross Join( Select Max( id ) As Id From #TestData ) As MaxId
        Where T.Name = 'Food'
        Union All
        Select Cast(Parent.id + Row_Number() Over( Order By Child.Id ) + 1 As int)
            , Parent.Id
            , 'Copy of ' + Child.Name
            , Child.Id
            , Child.ParentId
        From Data As Parent
            Join #TestData As Child
                On Child.ParentId = Parent.OldId
        )
    Insert #TestData( Id, ParentId, Name )
    Select Id, ParentId, Name
    From Data
    GO
    Set Identity_Insert #TestData Off
    GO  
      

    結果

    id |親 ID |名前 -- | -------- | -----------------1 | 0 |フード2 | 1 |テイスト3 | 1 |価格4 | 2 |味の要件5 | 0 | Food7 のコピー | 5 | Taste8 のコピー | 5 | Price9 のコピー | 7 |味覚要件のコピー


    1. 何かを含むPostgresクエリJSON配列

    2. アクセス拒否;この操作にはSUPER特権(少なくとも1つ)が必要です

    3. mysqlをBasexに接続する方法は?

    4. モデルがわずかに変更された複数のデータベース。実行時に EF がさまざまなデータベース構造を処理できるようにするにはどうすればよいですか?