有没有办法在T-SQL中快速复制记录?

时间:2011-03-19 14:58:16

标签: tsql sql-server-2008 duplicate-data

除了由ID自动添加的ID ident int之外,我需要复制所有字段完全相同的所有行。

复制/克隆记录或记录(最多50个)的最佳方法是什么?

MS SQL 2008中是否有任何T-SQL功能,或者我是否需要在存储过程中选择插入?

3 个答案:

答案 0 :(得分:2)

实现所需内容的唯一方法是使用Insert语句枚举除标识列之外的所有列。

当然,您可以使用Insert语句中的Select语句选择要复制的多行。但是,我会认为这会违反您的业务密钥(除了您拥有的代理密钥之外,您对表的其他唯一约束?)并且还需要更改其他列。

Insert MyTable( ...
Select ...
From MyTable
Where ....

答案 1 :(得分:0)

如果您能够在插入行时检查重复条件,则可以在表上放置INSERT触发器。这将允许您在插入列时检查列,而不必选择整个表。

答案 2 :(得分:0)

如果它是纯副本(减去ID字段),则将执行以下操作(将“ NameOfExistingTable”替换为您要从中复制行的表,并可以选择使用Where子句限制要复制的数据):

const data = [{ skill: 'css', user: 'Bill' },{ skill: 'javascript', user: 'Chad' },{ skill: 'javascript', user: 'Bill' },{ skill: 'css', user: 'Sue' },{ skill: 'javascript', user: 'Sue' },{ skill: 'html', user: 'Sue' }]

const grouppedObj = data.reduce((all, {skill, user}) => {
    
    if (!all.hasOwnProperty(skill)) all[skill] = [];

    all[skill].push(user);

    return all;

}, {});

const result = Object.keys(grouppedObj).map(k => {
    return {
        skill: k,
        users: grouppedObj[k],
        count: grouppedObj[k].length
    }
});

console.log(result);