为什么这个sql不能识别IF语句中的TargetPosition

时间:2015-12-21 10:45:25

标签: c# sql-server if-statement

我有两张大致相同列的表格。

我想更新表Orders的Status列,具体取决于表FilledOrders中ExecSignedAmount的总和是否等于Orders.TargetPosition

但是这个UPDATE语句似乎没有识别TargetPosition:

  UPDATE [FX_PROD].[dbo].[tblOrders] 
  SET [Status] =  (IF ((SELECT SUM([ExecSignedAmount]) 
                        FROM [FX_PROD].[dbo].[tblFilledOrders] 
                        WHERE [OrderID] = 2) = [FX_PROD].[dbo].[tblOrders].[TargetPosition]) 'YES' ELSE 'NO')
  WHERE [OrderID] = 2;

我做错了什么?

1 个答案:

答案 0 :(得分:3)

您无法在更新查询中使用IF语句。

Sql Server 2012+

中试试IIF
 UPDATE [FX_PROD].[dbo].[tblOrders] 
  SET [Status] =  (IIF ((SELECT SUM([ExecSignedAmount]) 
                        FROM [FX_PROD].[dbo].[tblFilledOrders] 
                        WHERE [OrderID] = 2) = [FX_PROD].[dbo].[tblOrders].[TargetPosition]) ,'YES','NO')
  WHERE [OrderID] = 2;

或小于sql server 2012的任何内容使用case statement

 UPDATE [FX_PROD].[dbo].[tblOrders] 
  SET [Status] =  (case when ((SELECT SUM([ExecSignedAmount]) 
                        FROM [FX_PROD].[dbo].[tblFilledOrders] 
                        WHERE [OrderID] = 2) = [FX_PROD].[dbo].[tblOrders].[TargetPosition]) then 'YES' else 'NO' end)
  WHERE [OrderID] = 2;