3

我正在尝试创建一个存储过程,该过程将在 id = @id 的列 a、b、c、d 中获取一行,并插入一个新行,其中 a、b、c 的值相同,但 d 会不同。

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

4

2 回答 2

5

假设d是 anINT并且您想要插入,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 之外的所有列”……您需要单独列出它们。如果打字是问题,有一种简单的方法可以解决这个问题。打开对象资源管理器,展开您的服务器、数据库、表和有问题的表,然后将列节点拖到查询窗口上:

在此处输入图像描述

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

于 2012-05-21T17:41:54.260 回答
1

可能这有帮助 -

INSERT INTO tablename
(a, b, c, d)
VALUES
(SELECT col1, col2, col3, 'newcolvalue'
 FROM tablename
 WHERE id = @id);
于 2012-05-21T17:43:29.597 回答