我想做这样的事情:
INSERT INTO T SELECT * FROM T WHERE Column1 = 'MagicValue' -- (multiple rows may be affected)
问题是T有一个主键列,因此这会导致错误,就像尝试设置主键一样。坦率地说,我也不想设置主键。我想创建具有新主键的全新行,但其余字段将从原始行复制。
这应该是适用于各种表的通用代码。那么,如果没有好的方法,我会编写代码来动态提取列名,构建列表等。但也许有?我是第一个尝试在数据库中创建重复行的人吗?
答案 0 :(得分:0)
我假设“主键”表示自动分配或自动增加的identity
或guid
数据类型。
如果没有一些非常奇特的动态SQL,你就不能做你想做的事。如果要插入除标识字段以外的所有内容,则需要指定字段。
如果您要为该字段指定值,则需要指定SELECT
和INSERT
AND 中的所有字段{{1} }。
答案 1 :(得分:0)
你没有从复制数据库中的行中获得任何东西(考虑到你没有尝试设置主键)。这将是更明智的,并将避免问题有另一列称为“金额”或其他什么。
类似
UPDATE T SET Amount = Amount + 1 WHERE Column1 = 'MagicValue'
或者如果它的返回字段数量增加超过1个
Update T SET Amount = Amount * 2 WHERE Column1 = 'MagicValue'
我不确定你要做的是什么,但是如果上述内容对你正在做的事情不起作用,我认为你的设计需要一个新表并将其插入那里。
编辑:同样如你的评论中所提到的,通用插入并不真正有意义。想象一下,为了实现这一点,你需要相同数量的字段,并且它们将保持相同的值,表明它们也应该具有相同的名称(即使它不需要它)。它基本上是两次相同的表结构。