0

我想做这样的事情:

INSERT INTO T SELECT * FROM T WHERE Column1 = 'MagicValue' -- (multiple rows may be affected)

问题是 T 有一个主键列,因此这会导致错误,就像尝试设置主键一样。坦率地说,我也不想设置主键。我想用新的主键创建全新的行,但其余字段是从原始行复制过来的。

这应该是适用于各种表格的通用代码。好吧,所以如果没有很好的方法,我只会编写代码来动态提取列名、构造列表等。但也许有?我是第一个尝试在数据库中创建重复行的人吗?

4

2 回答 2

0

我假设“主键”是指自动分配identityguid自动递增的数据类型。

没有一些非常花哨的动态 SQL,你就无法做你想做的事。如果要插入除标识字段之外的所有内容,则需要指定字段。

如果要为该字段指定一个值,则需要SELECTINSERT AND中指定所有字段IDENTITY_INSERT

于 2011-05-04T20:56:28.393 回答
0

您不会从复制数据库中的一行获得任何收益(考虑到您没有尝试设置主键)。将另一列称为“金额”或其他内容会更明智并且可以避免问题。

就像是

UPDATE T SET Amount = Amount + 1 WHERE Column1 = 'MagicValue'

或者如果它可以增加超过 1 个类似的返回字段数量

Update T SET Amount = Amount * 2 WHERE Column1 = 'MagicValue'

我不确定您到底要做什么,但如果上述方法不适用于您正在做的事情,我认为您的设计需要一个新表并将其插入那里。

编辑:也正如您在评论中提到的那样,通用插入实际上没有意义。想象一下,要使其工作,您需要相同数量的字段,并且它们将保持相同的值,表明它们也应该具有相同的名称(即使它不需要它)。它基本上是相同的表结构两次。

于 2011-05-04T21:08:15.790 回答