Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据行是否已存在选择性地插入行_Sql_Sql Server - Fatal编程技术网

Sql 根据行是否已存在选择性地插入行

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

我目前有一个有几千个条目的表。我已经找到了一种方法,可以为系统中的所有条目插入一行新的数据,请参见下面的示例,但不幸的是,我刚刚发现一些条目的值已经存在于其中。我试图找出如何根据行是否已经存在有选择地运行INSERT-INTO函数

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中不起作用。如果我错了,请纠正我。