2014-09-04 93 views
0

我被要求在SQL合併中包含一些調試PRINT語句,這是我新來的。我被告知OUTPUT並不令人滿意。SQL合併中的打印語句

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 
     PRINT "Updated" 
    WHEN NOT MATCHED THEN 
     INSERT (UnitMeasureCode, Name) 
     VALUES (source.UnitMeasureCode, source.Name) 
     PRINT "Inserted" 

這不起作用,因爲它顯示每個條件塊應該包含單個SQL命令。

有沒有簡單的方法來實現我所追求的?

回答

0
IF EXISTS (SELECT 1 FROM Production.UnitMeasure WHERE UnitMeasureCode = @UnitMeasureCode) 
    BEGIN 
    UPDATE Production.UnitMeasure 
     SET Name = @Name 
    WHERE UnitMeasureCode = @UnitMeasureCode 
    PRINT 'Updated' 
    END 
ELSE 
    BEGIN 
    INSERT Production.UnitMeasure (UnitMeasureCode, Name) 
    VALUES (@UnitMeasureCode, @Name) 
    PRINT 'Inserted' 
    END 

或另一種作法可能是

 UPDATE Production.UnitMeasure 
     SET Name = @Name 
    WHERE UnitMeasureCode = @UnitMeasureCode 

IF (@@ROWCOUNT <> 0) 
    BEGIN 
    PRINT 'Updated' 
    END 
ELSE 
    BEGIN 
    INSERT Production.UnitMeasure (UnitMeasureCode, Name) 
    VALUES (@UnitMeasureCode, @Name) 
    PRINT 'Inserted' 
    END 
+0

,我們已經開始用MERGE標準化的一對夫婦的原因。我在這裏拿走MERGE條件中的PRINT語句是不允許的嗎? – 2014-09-04 15:47:59

+0

由於多種原因,我不使用合併語句在此處查看[使用SQL Server的MERGE語句時的注意事項](http://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers -merge語句/)。因此,我沒有太多使用Merge語句的經驗,除了output子句外,我從來沒有見過多於一條語句在Merge子句(匹配/不匹配)中執行。 – 2014-09-04 15:54:00

+0

正如你可以在鏈接中看到的合併聲明有近13個活躍的錯誤,我建議我的團隊遠離它並堅持'IF EXISTS'的舊方法,並等到所有這些錯誤都得到修復:) – 2014-09-04 15:56:27