我无法理解这个查询完成了什么:
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
该模式包括五个表目录、数据条目、数据条目版本、标签、用户
我无法理解这个查询完成了什么:
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
该模式包括五个表目录、数据条目、数据条目版本、标签、用户
基本上,如果它不存在,则插入一条记录,然后返回已插入或已存在的记录的 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
如果没有返回任何内容,则执行插入,但这种方法的优势在于它不易受到“竞争条件”的影响其中两个进程可能试图同时插入相同的记录。