2012-05-13 88 views
1

我無法理解什麼是這個查詢完成:這個SQL查詢做了什麼?

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 

該方案包括5代表目錄,數據錄入,dataentryversion,標籤,用戶

回答

2

基本上你插入一條記錄,如果它不已經存在,然後返回已插入記錄的ID或已經存在的記錄的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如果不出是返回然後執行插入,但是這種方法的優越性在於它不容易受到兩個進程試圖同時插入相同記錄的'競爭條件'的影響。

+0

感謝隊友,感謝您的幫助,您爲我連接了點! – user8189

+0

你應該將他的回答標記爲正確答案。 –

+0

yaeh爲什麼不! ,我很樂意,但你如何將答覆標記爲正確答案?原諒我,但我是一個新的技術論壇的東西,有一個按鈕下面,與文本問「這個帖子對你有幫助」,我已經點擊它,!!! – user8189