仅当表中不存在该值时才更新SQL列

Onlynitins

我正在使用SQL Server 2012,并且我的表的列具有逗号分隔的值(不好的做法,但目前尚无法避免)。每次用户尝试添加申请人时,如何检查其是否已存在,并且仅在其不存在时才进行更新(附加)。

JobID        Applicants
----------------------------
J001         a001,a002,a003

例如。如果我尝试一次将申请人A003,a004加入工作J001,则仅应添加a004。

我认为合并在这里可能会有所帮助,但无法弄清楚如何做。

我尝试通过转换为XML来拆分传入的值(通过USP参数),但不知道现在在存储过程中该怎么做。

Unnikrishnan R

这是您的问题的答案。

请遵循以下步骤。

1。创建以下功能。

CREATE FUNCTION SplitString
(    
      @Input NVARCHAR(MAX),
      @Character CHAR(1)
)
RETURNS @Output TABLE (
      Item NVARCHAR(1000)
)
AS
BEGIN
      DECLARE @StartIndex INT, @EndIndex INT

      SET @StartIndex = 1
      IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character
      BEGIN
            SET @Input = @Input + @Character
      END

      WHILE CHARINDEX(@Character, @Input) > 0
      BEGIN
            SET @EndIndex = CHARINDEX(@Character, @Input)

            INSERT INTO @Output(Item)
            SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1)

            SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input))
      END

      RETURN
END
GO
  1. 创建样本输入表#T

    SELECT 'J001' as JobID, CONVERT(VARCHAR(50),'a001,a002,a003') as Applicants INTO #T
    
  2. 并且以下脚本将执行您的更新。

           ;with cte_1
           as
         (SELECT item  FROM #T
            cross apply (select item from dbo.SplitString(Applicants, ','))X
          WHERE JobID='J001')
         UPDATE t
    
         set t.Applicants= t.Applicants+','+ STUFF(( SELECT ','+b.Item  
    
                      FROM dbo.SplitString('a001,a002,a004,a005', ',') b
                        LEFT JOIN  cte_1 a ON b.Item=a.Item 
                        WHERE a.Item IS NULL  FOR XML PATH(''), TYPE).value('.','VARCHAR(max)'), 1, 1, '')
        FROM #T t WHERE t.JobID='J001'
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

仅当特定列中不存在值时才更新表

来自分类Dev

仅当其他表中不存在数据时,SQL 才从该表中获取数据

来自分类Dev

仅当列中不存在值时才尝试执行SQL命令

来自分类Dev

仅当表 B 中不存在特定值时才从表 A 中获取值

来自分类Dev

仅当使用MySQL的值不存在时才如何从表中插入值?

来自分类Dev

仅当 oracle sql 中不存在值时才插入

来自分类Dev

仅当记录不存在时才插入表

来自分类Dev

仅当其他列中不存在值时更新列

来自分类Dev

仅当新的 providerId 不存在时才更新 MongoDB 字段值

来自分类Dev

SQL-仅当B不存在时才选择A

来自分类Dev

仅当值不存在时才从SELECT插入表中

来自分类Dev

仅当一个表中的数据不存在时才将其插入

来自分类Dev

仅当数组不存在时才推送到该数组

来自分类Dev

仅当不存在相同值的列时,Postgres更新列

来自分类Dev

仅当 Document 中不存在 providerId 时才更新提供者数组并增加计数

来自分类Dev

使用 Presto 查询 Hive 表时,如果该列不存在数据,我如何返回该列的值?

来自分类Dev

仅当不存在MongoDB文档字段时,才如何更新它们?

来自分类Dev

仅当值不存在时才返回行

来自分类Dev

SQL查询-插入,但仅当记录不存在时才插入?

来自分类Dev

SQL查询-插入,但仅当记录不存在时才插入?

来自分类Dev

仅当队列中不存在项目时才将其添加到队列中

来自分类Dev

仅当在Mongodb中使用数组运算符时该字段不存在时才设置$ set

来自分类Dev

仅当文件不存在时,才在用户给定的路径中创建文件

来自分类Dev

从SQL返回计数时,如何在不存在该计数的分组项中也包含该值?

来自分类Dev

如果值不存在则更新表

来自分类Dev

在Hive中,如何仅在该列不存在时添加该列?

来自分类Dev

更新表中不存在的记录

来自分类Dev

从表中删除行,其中另一表中不存在该列

来自分类Dev

获取表中不存在的值?

Related 相关文章

  1. 1

    仅当特定列中不存在值时才更新表

  2. 2

    仅当其他表中不存在数据时,SQL 才从该表中获取数据

  3. 3

    仅当列中不存在值时才尝试执行SQL命令

  4. 4

    仅当表 B 中不存在特定值时才从表 A 中获取值

  5. 5

    仅当使用MySQL的值不存在时才如何从表中插入值?

  6. 6

    仅当 oracle sql 中不存在值时才插入

  7. 7

    仅当记录不存在时才插入表

  8. 8

    仅当其他列中不存在值时更新列

  9. 9

    仅当新的 providerId 不存在时才更新 MongoDB 字段值

  10. 10

    SQL-仅当B不存在时才选择A

  11. 11

    仅当值不存在时才从SELECT插入表中

  12. 12

    仅当一个表中的数据不存在时才将其插入

  13. 13

    仅当数组不存在时才推送到该数组

  14. 14

    仅当不存在相同值的列时,Postgres更新列

  15. 15

    仅当 Document 中不存在 providerId 时才更新提供者数组并增加计数

  16. 16

    使用 Presto 查询 Hive 表时,如果该列不存在数据,我如何返回该列的值?

  17. 17

    仅当不存在MongoDB文档字段时,才如何更新它们?

  18. 18

    仅当值不存在时才返回行

  19. 19

    SQL查询-插入,但仅当记录不存在时才插入?

  20. 20

    SQL查询-插入,但仅当记录不存在时才插入?

  21. 21

    仅当队列中不存在项目时才将其添加到队列中

  22. 22

    仅当在Mongodb中使用数组运算符时该字段不存在时才设置$ set

  23. 23

    仅当文件不存在时,才在用户给定的路径中创建文件

  24. 24

    从SQL返回计数时,如何在不存在该计数的分组项中也包含该值?

  25. 25

    如果值不存在则更新表

  26. 26

    在Hive中,如何仅在该列不存在时添加该列?

  27. 27

    更新表中不存在的记录

  28. 28

    从表中删除行,其中另一表中不存在该列

  29. 29

    获取表中不存在的值?

热门标签

归档