2012-05-13 3 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

で構成することがdoesnの場合は基本的にレコードを挿入しています既に存在していて、挿入されたか、すでに存在していたレコードのIDを返します。

私は以下のコードにコメントを追加しました:catalogのうち、一致するレコードを選択し、IEと何もしなければ、他の方法の周りにこのクエリを記述することが可能である、それは価値がある何のため

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 

インサートを実行して戻ったが、このアプローチは、2つのプロセスが同じレコードを同時に挿入しようとしている「競合状態」に対して脆弱ではないという点で優れている。

+0

おかげさまで、助けてくれてありがとう、あなたは私のためにドットを接続しました!! – user8189

+0

あなたは正しい答えとして彼の応答をマークする必要があります。 –

+0

yaehなぜいけないのですか? 、私は大好きですが、どのように答えを正しい答えとしてマークしていますか?私はこの記事を読んだことがありますが、私はこの技術フォーラムの新しいものに親切です。下のボタンがあり、テキストが「あなたに役立つこの記事でした」と私はすでにそれをクリックしていました!!! – user8189

関連する問題