这个SQL查询有什么作用?

时间:2012-05-13 20:54:21

标签: sql sql-server tsql

我无法理解此查询的完成情况:

DECLARE @CatalogID int
INSERT [Catalog] ([Name])
SELECT @Catalog WHERE NOT EXISTS (SELECT [Name] FROM [Catalog] WHERE [Name] = @Catalog)
SELECT @CatalogID = ID FROM [Catalog] WHERE [Name] = @Catalog

架构由五个表目录,数据输入,dataentryversion,标签,用户

组成

1 个答案:

答案 0 :(得分:2)

基本上,如果记录尚未存在,则插入记录,然后返回已插入或已存在的记录的ID。

我在下面的代码中添加了评论:

DECLARE @CatalogID int --Create a variable to hold the Catalog id 
INSERT [Catalog] ([Name]) --Inserting into the catalog table
SELECT @Catalog --The SELECT will only return a value if a matching record does not exist
WHERE NOT EXISTS (SELECT [Name] FROM [Catalog] WHERE [Name] = @Catalog) 

SELECT @CatalogID = ID FROM [Catalog] WHERE [Name] = @Catalog --Returns the ID of the catalog record

对于它的价值,可以反过来编写这个查询,即从catalog中选择匹配的记录,如果没有返回则执行插入,但这种方法更优越,因为它是不容易受到“竞争条件”的影响,其中两个进程可能试图同时插入相同的记录。