SQL Server(如果不存在)以递归方式插入
我是SQL Server新手。使用2014版 我有一个以GUID为键的表。我有一个插入语句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列自动生成。在插入过
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)开始插入。。。。。结束。似乎不起作用。还有其他解决办法吗?