除了由ID自动添加的ID ident int之外,我需要复制所有字段完全相同的所有行。
复制/克隆记录或记录(最多50个)的最佳方法是什么?
MS SQL 2008中是否有任何T-SQL功能,或者我是否需要在存储过程中选择插入?
答案 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);