SQL Server:在使用 select * 更改某些值时重复表中的行

Pol*_* F. 1 sql t-sql insert insert-update sql-server-2014

我需要将几乎重复的行插入表中,同时更改一些值。

例如,插入具有新 id 的重复行(我不需要自动 id)和不同的名称,但所有其他值相同。问题是我需要做出选择 *

我知道有一种方法可以通过这种方式插入选择和更改值:

insert into Table1(id,name,surname) select newid(),'David',surname from Table1 where id=1
Run Code Online (Sandbox Code Playgroud)

但我不想登记所有字段,而是想使用 select *,所以如果添加了字段,我将不必更改我的存储过程。

我想要类似的东西:

insert into Table1 (
   update (SELECT *
          FROM Table1
          WHERE  id= 1  ) t 
    set t.id= newid(),name='David')
Run Code Online (Sandbox Code Playgroud)

有办法做到吗?

Oda*_*wan 5

您可以使用临时哈希表来完成此操作。

SELECT *
INTO #temp 
FROM Table1
WHERE id= 1;

UPDATE #temp 
  SET ID = newid(),
      Name='David'

INSERT INTO Table1 SELECT * FROM #temp;
Run Code Online (Sandbox Code Playgroud)

请注意,当客户端与数据库服务器断开连接时,#temp 表会自动删除。

另外,如前所述,我更喜欢单独使用列名而不是 *。

示例:SQL 小提琴