我无法理解此查询的完成情况:
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,标签,用户
组成答案 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
中选择匹配的记录,如果没有返回则执行插入,但这种方法更优越,因为它是不容易受到“竞争条件”的影响,其中两个进程可能试图同时插入相同的记录。