2012-01-05 56 views
2

我试图编写一个查询来根据另一列是否为空来设置一个位值。根据空值查询的结果将列更新为BIT值

例如:

UPDATE @tmpRank 
SET IsXYSale = NOT dbo.Sales_XForY.ID IS NULL 
FROM @tmpRank 
LEFT JOIN dbo.Sales_XForY ON SaleId = @tmpRank.SaleId 

我得到的不是关键字语法错误,但我看不出如何纠正查询。

回答

8
SET IsXYSale = CASE WHEN dbo.Sales_XForY.ID IS NULL THEN 0 ELSE 1 END 
1
UPDATE @tmpRank 
SET IsXYSale = CASE WHEN dbo.Sales_XForY.ID IS NULL THEN 0 ELSE 1 END 
FROM @tmpRank 
LEFT JOIN dbo.Sales_XForY ON SaleId = @tmpRank.SaleId 
1

SQL Server有没有隐含的布尔

UPDATE @tmpRank 
SET IsXYSale = CASE WHEN dbo.Sales_XForY.ID IS NULL THEN 0 ELSE 1 END 
FROM @tmpRank 
LEFT JOIN dbo.Sales_XForY ON SaleId = @tmpRank.SaleId 

在这种情况下,您可以利用位是如何工作的:任何非零,非空值变为1.假设你绝不能有0作为当然的ID值...

SET IsXYSale = ISNULL(dbo.Sales_XForY.ID, 0) 
+1

将为所有的情况下工作,除了dbo.Sales_XForY.ID = 0 – 2012-01-05 12:44:17

+0

@OlegDok:好点。虽然,虽然MySQL不会允许IDENTITY(1,1),但MySQL不会允许0,所以*可能*将会是OK – gbn 2012-01-05 12:48:50

+0

yep,但是你一定知道 - 如果发生什么事情 - 它会发生,特别是在DB 8-) – 2012-01-05 12:51:09