Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách nhanh nhất để sao chép hàng trong SQL

Bạn có thể chạy một cái gì đó giống như thủ tục được lưu trữ bên dưới để tránh gõ ra tất cả các tên cột. Ví dụ dưới đây giả định là một int, nhưng bạn có thể hoán đổi loại khóa cho bất kỳ kiểu dữ liệu nào.

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

Bạn gọi nó như thế này:

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. Tại sao ép kiểu / chuyển đổi từ int trả về dấu hoa thị

  2. Cách đổi tên bảng trong SQL Server

  3. SQL Server Biểu thức chính quy trong T-SQL

  4. Tôi có nên đặt kích thước nhóm tối đa trong chuỗi kết nối cơ sở dữ liệu không? Điều gì xảy ra nếu tôi không làm vậy?

  5. Làm thế nào để so sánh dấu thời gian SQL trong .NET?