如何将表T中的行的副本插入表T中而不列出其列且没有主键错误?

| 我想做这样的事情:
INSERT INTO T SELECT * FROM T WHERE Column1 = \'MagicValue\' -- (multiple rows may be affected)
问题在于T具有主键列,因此这会导致错误,就像尝试设置主键一样。坦白说,我也不想设置主键。我想使用新的主键创建全新的行,但其余字段将从原始行复制过来。 这应该是适用于各种表的通用代码。好吧,因此,如果没有很好的方法,我将只编写代码以动态提取列名,构造列表等。但是也许有吗?我是第一个尝试在数据库中创建重复行的人吗?     
已邀请:
我假设使用“主键”表示自动分配或自动递增的
identity
guid
数据类型。 没有一些非常新颖的动态SQL,您将无法做您想要做的事情。如果要插入除身份字段以外的所有内容,则需要指定字段。 如果要为该字段指定一个值,则需要在
SELECT
INSERT
中指定所有字段,然后打开
IDENTITY_INSERT
。     
从数据库中复制一行不会获得任何收益(考虑到您没有尝试设置主键)。这将是更明智的做法,并且可以避免出现另一个名为“金额”或其他内容的列的问题。 就像是
UPDATE T SET Amount = Amount + 1 WHERE Column1 = \'MagicValue\'
或者它可以增加大于1的返回字段数量
Update T SET Amount = Amount * 2 WHERE Column1 = \'MagicValue\'
我不确定您要确切执行的操作,但是如果以上方法对您执行的操作不起作用,我认为您的设计需要一个新表并将其插入其中。 编辑:同样如您的评论所述,通用插入并没有真正意义。想象一下,要使此方法起作用,您需要使用相同数量的字段,并且它们将拥有相同的值,这表明它们也应具有相同的名称(即使不需要)。基本上是两次相同的表结构。     

要回复问题请先登录注册