sql >> Databáze >  >> RDS >> Sqlserver

Nejrychlejší způsob klonování řádku v SQL

Můžete spustit něco jako uloženou proceduru níže, abyste se vyhnuli psaní všech názvů sloupců. Níže uvedený příklad předpokládá int, ale typ klíče můžete zaměnit za jakýkoli datový typ.

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

Říkáte tomu takto:

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


  1. Získejte pouze číslice pomocí regulárního výrazu

  2. Jak ukládat obrázky do varbinary (max) sloupce?

  3. Převeďte název měsíce na číslo měsíce v SQL Server

  4. Získejte předchozí a další řádek z řádků vybraných s podmínkami (WHERE).