【发布时间】:2017-08-04 22:58:53
【问题描述】:
我正在创建一个存储过程,我从 SELECT 语句插入到表中。该表有 4 列(例如 Col1、Col2、Col3、Col4)。 Column1 具有唯一值。 Column4 是插入行的时间戳。
1.) 当我在以后运行存储过程时,假设在 20032017 上,如果表中不存在 Col1,我会将行添加到表中。
2.) 如果表中已经存在 Col1,我会更新 Col2 和 Col3 的值,同时保持 Col5 的值不变。
所以假设在存储过程的第二次运行中,select 语句返回了这个数据集。 表格会这样显示, Col1 值为 7 的行被插入到表中。 Col1 值为 1、2 和 3 的行更新了 Col2 和 Col3 的值,而 Col4 保持相同的值。
可能我必须在存储过程中创建一个循环,其中处理 SELECT 语句返回的数据集中的每一行,但我是存储过程的新手,我遇到了困难。非常感谢代码示例,因此我可以更好地理解。
谢谢
【问题讨论】:
-
尝试阅读
MERGE- 听起来像你需要的。 msdn.microsoft.com/en-us/library/bb510625.aspx -
@user2307236 需要澄清的几点: (1) 在第 2 步中,我假设您指的是 Col4,而不是 Col5。 (2) 在您的演练中,您有一个 ID 为 {1,2,3,7} 的表已经存在,但您说您想插入 {7}。您不是说要更新 7 吗? (3) 第三张桌子是怎么回事?它从哪里来的?为什么大多数日期都改变了?
-
@Mike 使用 MERGE 解决。谢谢
标签: sql sql-server tsql stored-procedures