Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Най-бързият начин за клониране на ред в SQL

Можете да изпълните нещо като съхранената процедура по-долу, за да избегнете въвеждането на всички имена на колони. Примерът по-долу предполага int, но можете да замените типа ключ за всеки тип данни.

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

Наричате го така:

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. OBJECTPROPERTY() срещу OBJECTPROPERTYEX() в SQL Server:Каква е разликата?

  2. Защо не мога да изпълня агрегатна функция върху израз, съдържащ агрегат, но мога да го направя, като създам нов оператор за избор около него?

  3. Как мога да предотвратя нарастването на журнала в SQL Server, когато вмъквам милиони записи

  4. SSIS Excel Import Forcing Неправилен тип колона

  5. Грешка в CTE:Типовете не съвпадат между котвата и рекурсивната част