3

重複の可能性:
SQL Server での INSERT OR UPDATE のソリューション

条件文を含むSQLクエリを書きたくて困っています。

EG : 列を持つ SQL テーブルがあるID,NAME,STATUSので、このテーブルに値を挿入する前に、テーブルに既に存在する名前を確認したいと思います。存在する場合は、ステータス値を更新します。

queryString (ストアド プロシージャの代わりに SQL Server クエリ) メソッドを使用してクエリを作成することは可能ですか? SQL Server 2008 R2 を使用しています

4

3 に答える 3

3

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
于 2012-07-17T07:39:45.727 に答える
2

可能な方法は次のとおりです。

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番目は不要です)。

于 2012-07-17T08:02:15.873 に答える
0

あなたは次のようなものが欲しい

IF EXISTS (SELECT Name FROM YourDatabase WHERE [_SomeCondition_])
BEGIN
    INSERT INTO YourTable (Status) 
    SELECT OtherStatus AS  Status 
    FROM SomeOtherTable 
END

それでおしまい。

これがお役に立てば幸いです。

于 2012-07-17T08:09:54.913 に答える