sql server 2016中的串联和不存在操作

jdg4fx2g  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(221)

我有两个表,我希望tb1中的所有记录都插入tb2 tb1中的值是cxr1、cxr2和cxr3,因为cxr2已经在tb2中,所以只有两个记录是cxr1和cxr3,将使用插入tb2 NOT EXISTS 操作。
但是:我还需要那些记录将连接起来,例如cxr1,cxr3并保存到col action。这在sql server 2017中通过 string_agg 但由于某种原因,我不得不降级到2016年,我不得不使用 STUFF 函数我的问题是,连接的值包括所有记录,甚至那些已经存在的记录。
我的问题是:

  1. cmd.CommandText = "with cte as (SELECT @ID id, [DESC], [TYPE]FROM @XYZ_TBL TWHERE T.[TYPE] = @TYPE AND NOT EXISTS (SELECT ID, [DESC], [ACTION] FROM @ABC_TBL A WHERE ID = @ID AND T.[DESC] like A.[DESC]))
  2. INSERT INTO @ABC_TBL (ID, [DESC], [TYPE], [ACTION])
  3. select @ID, [DESC], [TYPE], STUFF((SELECT ';' + OID_PCC FROM IATA_TBL WHERE GDS = 'AGTD' ORDER BY OID_PCC FOR XML PATH('')),1,1,'') from cte)"
  4. cmd.Parameters.Add("@ID", SqlDbType.Int).Value = Textbox1.Text
  5. cmd.Parameters.Add("@TYPE", SqlDbType.VarChar, 255).Value = Textbox2.Text
  6. cmd.Parameters.Add("@ACTION", SqlDbType.VarChar,255).Value = The Value should be CXR1;CXR3 the added not exists value in concatenation

起始表 XYZ_TBL :

  1. TYPE DESC
  2. --------------
  3. A CXR1
  4. B ALC
  5. C ADB
  6. A CXR2
  7. B ALC1
  8. C ADB1
  9. A CXR3

目标表 ABC_TBL :

  1. ID DESC TYPE ACTION
  2. -------------------------------
  3. 123 CXR1 A CXR1;CXR3
  4. 123 CXR3 A CXR1;CXR3

中的现有记录 ABC_TBL :

  1. ID DESC TYPE ACTION
  2. --------------------------
  3. 123 CXR2 A CXR2

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题