从另一行插入行,除了一行?

我试图创建一个存储过程,将采取一行与列a,b,c,d其中id = @id并插入一个新的行与a,b,c相同的值,除了d将不同。

在这种情况下,大约有50列,但只有一列需要不同。

3
额外 编辑
意见: 1
insert into mytable(c1,c2,c3,c4,...,c50)从mytable中选择c1,c2,c3,c4,...,c49,@customval,其中id = @id
额外 作者 mellamokb,

2 答案

假设 d 是一个 INT ,并且您想插入 15 而不是 dbo.oldtable 中的任何内容, 然后:

INSERT dbo.newtable(a,b,c,d) 
  SELECT a,b,c,d = 15
  FROM dbo.oldtable
  WHERE id = @id;

更可能来自一个变量,所以:

INSERT dbo.newtable(a,b,c,d) 
  SELECT a,b,c,d = @whatever
  FROM dbo.oldtable
  WHERE id = @id;

对不起,但没有简写说“除d外的所有列”......您需要单独列出它们。如果打字是问题,那么有一个简单的方法来解决这个问题。打开对象资源管理器,展开您的服务器,数据库,表格和问题表,然后将列节点拖到查询窗口上:

enter image description here

现在,您只需从该列表中删除 d 列。

5
额外

可能是这个帮助 -

INSERT INTO tablename
(a, b, c, d)
VALUES
(SELECT col1, col2, col3, 'newcolvalue'
 FROM tablename
 WHERE id = @id);
1
额外