条件文を含むSQLクエリを書きたくて困っています。
EG : 列を持つ SQL テーブルがあるID,NAME,STATUS
ので、このテーブルに値を挿入する前に、テーブルに既に存在する名前を確認したいと思います。存在する場合は、ステータス値を更新します。
queryString (ストアド プロシージャの代わりに SQL Server クエリ) メソッドを使用してクエリを作成することは可能ですか? SQL Server 2008 R2 を使用しています
条件文を含むSQLクエリを書きたくて困っています。
EG : 列を持つ SQL テーブルがあるID,NAME,STATUS
ので、このテーブルに値を挿入する前に、テーブルに既に存在する名前を確認したいと思います。存在する場合は、ステータス値を更新します。
queryString (ストアド プロシージャの代わりに SQL Server クエリ) メソッドを使用してクエリを作成することは可能ですか? SQL Server 2008 R2 を使用しています
MERGE
クエリ構文が必要です
ドキュメントから ( http://technet.microsoft.com/en-us/library/bb510625.aspx )
MERGE Production.UnitMeasure AS target
USING (SELECT @UnitMeasureCode, @Name) AS source (UnitMeasureCode, Name)
ON (target.UnitMeasureCode = source.UnitMeasureCode)
WHEN MATCHED THEN
UPDATE SET Name = source.Name
WHEN NOT MATCHED THEN
INSERT (UnitMeasureCode, Name)
VALUES (source.UnitMeasureCode, source.Name)
OUTPUT deleted.*, $action, inserted.* INTO #MyTempTable
可能な方法は次のとおりです。
1) 'EXISTS' メソッドを使用する
IF EXISTS(SELECT 1 FROM Table1 WHERE Name = @Name)
UPDATE Table1 SET Status = @Status WHERE Name = @Name
ELSE
INSERT INTO Table1 (Name, Status) VALUES(@Name, @Status)
2) MERGE を使用する
MERGE Table1 AS TARGET
USING (SELECT @Name, @Status FROM Table1) AS Source (Name, Status)
ON (TARGET.Name = Source.Name)
WHEN MATCHED
THEN UPDATE SET Status = Source.Status
WHEN NOT MATCHED
THEN INSERT (Name, Status) VALUES (Source.Name, Source.Status)
3) コンパイルされていないクエリ (クエリの構築)
--Unable to post on S.O.F due to security limitations
提案された方法は1番目と2番目ですが(3番目は不要です)。
あなたは次のようなものが欲しい
IF EXISTS (SELECT Name FROM YourDatabase WHERE [_SomeCondition_])
BEGIN
INSERT INTO YourTable (Status)
SELECT OtherStatus AS Status
FROM SomeOtherTable
END
それでおしまい。
これがお役に立てば幸いです。