我正在使用SQL Server 2012,并且我的表的列具有逗号分隔的值(不好的做法,但目前尚无法避免)。每次用户尝试添加申请人时,如何检查其是否已存在,并且仅在其不存在时才进行更新(附加)。
JobID Applicants
----------------------------
J001 a001,a002,a003
例如。如果我尝试一次将申请人A003,a004加入工作J001,则仅应添加a004。
我认为合并在这里可能会有所帮助,但无法弄清楚如何做。
我尝试通过转换为XML来拆分传入的值(通过USP参数),但不知道现在在存储过程中该怎么做。
这是您的问题的答案。
请遵循以下步骤。
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
创建样本输入表#T
SELECT 'J001' as JobID, CONVERT(VARCHAR(50),'a001,a002,a003') as Applicants INTO #T
并且以下脚本将执行您的更新。
;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] 删除。
我来说两句