【发布时间】:2019-07-19 12:30:19
【问题描述】:
我正在尝试使用 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 或其他东西来比较并清除列表,然后对没有它的列表运行查询(我昨天做了一个快速解决),但是我希望有一种更好的方法可以一步完成。
【问题讨论】:
-
标记您的数据库名称。
-
您在 column_a 或 column_b 的哪一列上设置了唯一键??
-
您在 SQL Server 中使用 MySQL 构造 (
INSERT IGNORE)? -
是的,有一种方法——使用MERGE
标签: sql sql-server tsql split sql-insert