Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara tercepat untuk mengkloning baris dalam SQL

Anda dapat menjalankan sesuatu seperti prosedur tersimpan di bawah ini untuk menghindari pengetikan semua nama kolom. Contoh di bawah ini mengasumsikan sebuah int, tetapi Anda dapat menukar tipe kunci dengan tipe data apa pun.

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

Anda menyebutnya seperti ini:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bandingkan Kolom Di Mana Satu Mirip dengan Bagian Lain

  2. 5 Trik untuk Memastikan Kinerja Puncak SQL Server

  3. Kerangka Entitas:Metode Database.ExecuteSqlCommand

  4. Cara melewatkan nilai nama kolom sebagai argumen SQL menggunakan placeholder

  5. Bagaimana cara mendapatkan id yang terakhir dimasukkan?