SQL查询包含IF / ELSE语句

时间:2012-07-17 07:36:41

标签: sql sql-server-2008-r2

  

可能重复:
  Solutions for INSERT OR UPDATE on SQL Server

我非常麻烦,我想写一个包含条件语句的SQL查询。

EG:我有一个带有ID,NAME,STATUS列的SQL表,所以在我将值插入此表之前,我想检查表中已存在的名称。如果它存在,那么我想更新状态值。

是否可以使用queryString(SQL Server查询而不是存储过程)方法编写查询,如果有人知道请帮助我。我正在使用SQL Server 2008 R2

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

虽然建议的方法是第一和第二。第二(第三是不必要的)。

答案 2 :(得分:0)

你想要像

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

就是这样。

我希望这会有所帮助。