基本的に、レコードがまだ存在しない場合は挿入し、挿入された、または既に存在するレコードの 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
何も返されない場合は挿入を実行しますが、このアプローチは「競合状態」に対して脆弱ではないという点で優れています2 つのプロセスが同時に同じレコードを挿入しようとしている可能性があります。