Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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_Sql Server 2014 - Fatal编程技术网

SQL Server(如果不存在)以递归方式插入

SQL Server(如果不存在)以递归方式插入,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,我是SQL Server新手。使用2014版 我有一个以GUID为键的表。我有一个插入语句 IF NOT EXISTS (select guid from table) insert into table (,,) values (,,); 在这种情况下,如果guid不存在,插入将起作用;如果它存在,我需要生成一个新的guid并执行插入。这不仅仅限于两个级别。我需要检查生成的每个guid,然后相应地插入。如何使用查询或存储过程(在最坏的情况下)执行此操作?更改表使GUID列自动生成。在插入过

我是SQL Server新手。使用2014版

我有一个以GUID为键的表。我有一个插入语句

IF NOT EXISTS (select guid from table)
 insert into table (,,) values (,,);

在这种情况下,如果guid不存在,插入将起作用;如果它存在,我需要生成一个新的guid并执行插入。这不仅仅限于两个级别。我需要检查生成的每个guid,然后相应地插入。如何使用查询或存储过程(在最坏的情况下)执行此操作?

更改表使
GUID
列自动生成。在插入过程中,您不必每次都检查它是否存在

CREATE TABLE Your_Table
(
Guid_ID UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID() PRIMARY KEY,
Column_1 ...
)
如果你不能更改表格,那么

;with cte as
(
select newid(),value1,value2,..
)
Insert into Your_Table(Guid_ID,col1,col2,..)
Select newid(),value1,value2,..
from cte C
Where not exists (select 1 from Yourtable b where b.Guid_ID = c.Guid_ID ) 

更改表格,使
GUID
列自动生成。在插入过程中,您不必每次都检查它是否存在

CREATE TABLE Your_Table
(
Guid_ID UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID() PRIMARY KEY,
Column_1 ...
)
如果你不能更改表格,那么

;with cte as
(
select newid(),value1,value2,..
)
Insert into Your_Table(Guid_ID,col1,col2,..)
Select newid(),value1,value2,..
from cte C
Where not exists (select 1 from Yourtable b where b.Guid_ID = c.Guid_ID ) 

选择
NEWSEQUENTIALID()
而不是
NEWID()
?@GordonLinoff的任何特殊原因都是原因。感谢您的解决方案。它起作用了。不幸的是,在整个组织中使用CTE并不是一个可接受的解决方案。我正在尝试使用while(如果不存在,请从guid=@guid的表中选择1)开始插入。。。。。结束。似乎不起作用。任何其他解决方案?选择
NEWSEQUENTIALID()
而不是
NEWID()
的任何特定原因?@GordonLinoff是原因。感谢您的解决方案。它起作用了。不幸的是,在整个组织中使用CTE并不是一个可接受的解决方案。我正在尝试使用while(如果不存在,请从guid=@guid的表中选择1)开始插入。。。。。结束。似乎不起作用。还有其他解决办法吗?