sql >> Database >  >> RDS >> Sqlserver

Snelste manier om rij in SQL te klonen

U kunt zoiets als de onderstaande opgeslagen procedure uitvoeren om te voorkomen dat u alle kolomnamen moet typen. In het onderstaande voorbeeld wordt uitgegaan van een int, maar u kunt het sleuteltype omwisselen voor elk gegevenstype.

create procedure [CloneRow]
    @tableName varchar(max),
    @keyName varchar(max),
    @oldKeyId int,
    @newTableId int output
as
    declare @sqlCommand nvarchar(max),
            @columnList varchar(max);

    select  @columnList = coalesce(@columnList + ',','') + sys.columns.name
    from    sys.columns
    where   object_name(sys.columns.object_id) = @tableName
        and sys.columns.name not in ( @keyName )
        and is_computed = 0;

    set @sqlCommand = 'insert into ' + @tableName + ' ( ' + @columnList + ') (' +
        'select ' + @columnList + ' from ' + @tableName + ' where ' + @keyName + ' = @oldKeyId )'
    exec sp_executesql @sqlCommand, N'@oldKeyId int', @oldKeyId = @oldKeyId
    select @newTableId = @@identity -- note scope_identity() won't work here!
GO

Je noemt het zo:

declare @newOrderId int
exec [CloneRow] 'orderTable', 'orderId', 625911, @newOrderId output


  1. Hoe toegang krijgen tot de interne array-index met postgreSQL?

  2. Nummer van bind_result breekt de array php

  3. SQLServer - Hoe vind ik afhankelijke tabellen in mijn tabel?

  4. Optimaliseert MySQL subquery's automatisch?