【问题标题】:Insert new record in table depending upon conditions in another根据另一个条件在表中插入新记录
【发布时间】:2013-07-29 14:40:15
【问题描述】:

我已经搜索了所有内容并想出了一个空白。我正在尝试根据另一个表中的条件更新一条记录并在一个表中插入其他记录。两个表都有一个共同的 RecordID(一个 nvarchar,因为它们包含字符)。

最简单的英文解释:

  • 如果记录 ID1 在 ColumnA AND ColumnB AND ColumnC 中的值 表A
  • 然后,在 TableB 中,使用 TableA.ColumnA 中的值更新 ColumnBla
  • 然后插入一条新记录,从记录 ID1 复制所有字段, 加上足够的“A”到 RecordID
  • 然后,在这个新记录中,使用来自的值更新 CollumnBla 表A.B列
  • 对 TableA.ColumnC 中的值重复另一个新记录

在其他情况下,记录在 ColumnA 和 ColumnB 中具有值,但在 ColumnC 等中没有值。在这种情况下,只需要添加一条新记录,但它们应该被淘汰。

【问题讨论】:

  • 你能描述一下TableB的结构吗?
  • 转储架构并设置小提琴怎么样?

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:

您可以通过使用带有选择查询的 insert 将值插入到表中。

因此,您的场景的查询将如下所示。

     create table @RecordsUpdated(RecordID nvarchar(max))

     update t
     set ColumnBla = TableA.ColumnA
     output
         inserted.RecordID 
         into @RecordsUpdated
     from 
         TableB
         inner join TableA on TableB.RecordID = TableA.RecordID
     where
         TablesA.ColumnA is not null
         and TablesB.ColumnA is not null
         and TablesC.ColumnA is not null

     insert into TableB(RecordID, ColumnBLa)
     select TableA.RecordID + 'A', ColumnB
     from
       TableA
       inner join @RecordsUpdated on @RecordsUpdated.RecordID = TableA.RecordID

     insert into TableB(RecordID, ColumnBLa)
     select TableA.RecordID + 'A', ColumnC
     from
       TableA
       inner join @RecordsUpdated on @RecordsUpdated.RecordID = TableA.RecordID

【讨论】:

  • 太棒了,谢谢 Vasanth。我需要添加一点来获取所有字段,否则我尝试了它并且它有效。我已经开始想办法了,但没有这么简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
相关资源
最近更新 更多