1

我无法理解这个查询完成了什么:

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

该模式包括五个表目录、数据条目、数据条目版本、标签、用户

4

1 回答 1

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如果没有返回任何内容,则执行插入,但这种方法的优势在于它不易受到“竞争条件”的影响其中两个进程可能试图同时插入相同的记录。

于 2012-05-13T20:56:08.583 回答