Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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 Server插入,但不从表中选择_Sql_Sql Server - Fatal编程技术网

SQL Server插入,但不从表中选择

SQL Server插入,但不从表中选择,sql,sql-server,Sql,Sql Server,我想使用以下命令将一些人插入用户表: INSERT INTO [MyTable] (col2, col3) VALUES ('Jim', 'Bob'), ('Stinky', 'Pete'), ('Old', 'Frank') 如果已经存在ID列,我不希望输入这些条目,但是这里的唯一性应该由这两列的组合决定 如果我从表格中选择这些值,我想: INSERT INTO [MyTable] (col2, col3) SELECT [Name1], [Name2]

我想使用以下命令将一些人插入用户表:

INSERT INTO [MyTable] (col2, col3)  
VALUES ('Jim', 'Bob'),
       ('Stinky', 'Pete'),
       ('Old', 'Frank')
如果已经存在ID列,我不希望输入这些条目,但是这里的唯一性应该由这两列的组合决定

如果我从表格中选择这些值,我想:

INSERT INTO [MyTable] (col2, col3)
   SELECT [Name1], [Name2] 
   FROM [ExistingTable]
   EXCEPT 
   SELECT [col2], [col3] 
   FROM [MyTable]
那么,当我的数据不在表中时,如何执行此EXCEPT子句呢?

您可以将cte与not exists一起使用:

您可以在不存在的情况下使用cte:


首先,您应该让数据库验证唯一性:

create unique index unq_mytable_id on mytable(id);
如果id已经声明为主键,那么就不需要这样做了——应该是这样的

然后,您可以使用以下值包括一个列表:


当然,“不存在”也可以使用,但这更接近原始查询。

首先,您应该让数据库验证唯一性:

create unique index unq_mytable_id on mytable(id);
如果id已经声明为主键,那么就不需要这样做了——应该是这样的

然后,您可以使用以下值包括一个列表:


当然,“不存在”也可以使用,但这更接近您最初的查询。

@jamheadart。是的。不喜欢从表t中选择1-我在2008年,我想知道这是否是一个问题。@jamheadart。我修复了表名和别名。这应该有用。@jamheadart。是的。不喜欢从表t中选择1-我在2008年,我想知道这是否是一个问题。@jamheadart。我修复了表名和别名。这应该行的,是的!我知道我去年用过类似的东西,但我就是搞不懂什么是危险的语法,所以一直在兜圈子。谢谢是的,第1列是主要的关键!我知道我去年用过类似的东西,但我就是搞不懂什么是危险的语法,所以一直在兜圈子。谢谢是的,列1是主键Id
INSERT INTO [MyTable] (col2, col3)
   SELECT v.*
   FROM (VALUES ('Jim','Bob'), ('Stinky','Pete'), ('Old','Frank')
        ) v(col2, col3)
   EXCEPT
   SELECT col2, col3
   FROM mytable;