Sql 根据行是否已存在选择性地插入行
我目前有一个有几千个条目的表。我已经找到了一种方法,可以为系统中的所有条目插入一行新的数据,请参见下面的示例,但不幸的是,我刚刚发现一些条目的值已经存在于其中。我试图找出如何根据行是否已经存在有选择地运行INSERT-INTO函数Sql 根据行是否已存在选择性地插入行,sql,sql-server,Sql,Sql Server,我目前有一个有几千个条目的表。我已经找到了一种方法,可以为系统中的所有条目插入一行新的数据,请参见下面的示例,但不幸的是,我刚刚发现一些条目的值已经存在于其中。我试图找出如何根据行是否已经存在有选择地运行INSERT-INTO函数 Column 1 Column 2 Column 3 10 Address True 10 City False 10 State True 20 Address
Column 1 Column 2 Column 3
10 Address True
10 City False
10 State True
20 Address True
20 City True
20 State True
20 NEW NEW*
Column 1 Column 2 Column 3
10 Address True
10 City False
10 State True
10 NEW NEW
20 Address True
20 City True
20 State True
20 NEW NEW
我用于插入的代码是:
insert into table-name(Column1, Column2, Column3)
select
Column1, 'NEW', 'NEW*'
from
table-name
group by
Column1
我假设我需要使用IF/ELSE语句,但在IF语句中遇到了问题。目前,我正在使用以下代码:
IF Column 2 like 'New' leave NULL
ELSE
insert into table-name(Column1, Column2, Column3)
select
Column1, 'NEW', 'NEW*'
from table-name
group by Column1
我知道IF语句是错误的,但我正在试图弄清楚,如果已经填充了现有行值,如何保持它们不变。您可以使用INSERT IGNORE INTO 或在重复密钥更新语法中插入 看 和
dev.mysql.com我认为您需要的是一个带有重复密钥的插入 见:
对于SQL Server,请使用CTE定义要插入的数据集:
WITH NonDupes (<your fieldlist>)
AS
(SELECT <your fieldlist> FROM <your tables> WHERE <tablea>.<column> NOT IN (SELECT <column> FROM <tableb>))
INSERT INTO
<tableb>
VALUES(SELECT * FROM NonDupes)
使用SQL Server,可以执行不存在的操作
insert into table-name(Column1, Column2, Column3)
select
Column1, 'NEW', 'NEW*'
from
table-name
WHERE NOT EXISTS (SELECT 1 FROM table-name xref WHERE xref.Column1 = table-name.Column1 AND xref.Column2 = 'NEW')
group by
Column1
可以使用Merge语句仅插入不存在的行。另外,如果需要,您可以更新同一语句中的现有行
仔细检查问题的格式。目前很难解析。NM..我知道它现在已经修好了。我尝试过使用复制密钥的方法,但我认为它在Microsoft SQL Server中不起作用。如果我错了,请纠正我。