我正在尝试使用string_split命令将行插入表中。如果没有重复,它可以正常工作。但是,如果有重复项,则会出错。我想知道如何修改以下内容,以使其在已存在时跳过。
我已经尝试过像下面那样修改插入语句,但是如果遇到重复,它只会跳过整个插入语句。
BEGIN
IF NOT EXISTS (select * from table_a
where column_a = @module
and column_b in (select value from string_Split(@client_ids, ',')))
BEGIN
INSERT IGNORE INTO table_a (column_a, column_b)
SELECT @module, value FROM string_Split(@client_ids, ',')
END
END
原始查询...
DECLARE @client_ids VARCHAR(1000);
SET @client_ids = '12345,12346,456789,789459'
DECLARE @module int = 741852
-- Insert statement
INSERT INTO table_a (column_a, column_b)
SELECT @module, value FROM string_Split(@client_ids, ',')
希望可以帮助您澄清一下... table_a中有一堆客户端,其中许多客户端都附加有不同的模块。
即客户端123456将具有模块789,788,799,而客户端123455将具有模块789,788。
已经给我一个任务,给出了50个客户端模块799的列表。我只想更新尚未与该模块关联的客户端。我可以查询已经有列表的列表,然后使用excel或其他东西进行比较并删除列表,然后对没有列表的列表运行查询(我昨天做了一个快速解决方案),但是我希望有更好的方法一步一步完成所有工作。
答案 0 :(得分:1)
您可以只使用SELECT DISTINCT
:
INSERT INTO table_a (column_a, column_b)
SELECT DISTINCT @module, value
FROM string_Split(@client_ids, ',') ;
编辑:
哦,您想防止在表中插入行。也使用NOT EXISTS
。如果您仅检查value
,则:
INSERT INTO table_a (column_a, column_b)
SELECT DISTINCT @module, value
FROM string_Split(@client_ids, ',') s
WHERE NOT EXISTS (SELECT 1
FROM table_a a
WHERE @module = a.column_a AND
s.value = a.column_b
);