【问题标题】:SQL query contains IF / ELSE statement [duplicate]SQL查询包含IF / ELSE语句[重复]
【发布时间】:2012-07-16 02:34:05
【问题描述】:

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

我遇到了很大的麻烦,我想编写一个包含条件语句的 SQL 查询。

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

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

【问题讨论】:

    标签: sql sql-server-2008-r2


    【解决方案1】:

    您想要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
    

    【讨论】:

      【解决方案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 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
      

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

      【讨论】:

        【解决方案3】:

        你想要类似的东西

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

        就是这样。

        我希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-04
          • 2013-03-09
          • 1970-01-01
          • 2019-10-22
          • 2016-11-10
          • 2021-08-03
          • 2016-10-06
          • 1970-01-01
          相关资源
          最近更新 更多