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. XMLとXSDを使用して、データが入力されたデータベースを作成する

    2. Ajax呼び出しは、エコー値だけでなくページ全体を返します

    3. カーソルから1つにデータを結合する

    4. MySQLはサービスとして開始されません