我试图编写一个查询来根据另一列是否为空来设置一个位值。根据空值查询的结果将列更新为BIT值
例如:
UPDATE @tmpRank
SET IsXYSale = NOT dbo.Sales_XForY.ID IS NULL
FROM @tmpRank
LEFT JOIN dbo.Sales_XForY ON SaleId = @tmpRank.SaleId
我得到的不是关键字语法错误,但我看不出如何纠正查询。
我试图编写一个查询来根据另一列是否为空来设置一个位值。根据空值查询的结果将列更新为BIT值
例如:
UPDATE @tmpRank
SET IsXYSale = NOT dbo.Sales_XForY.ID IS NULL
FROM @tmpRank
LEFT JOIN dbo.Sales_XForY ON SaleId = @tmpRank.SaleId
我得到的不是关键字语法错误,但我看不出如何纠正查询。
SET IsXYSale = CASE WHEN dbo.Sales_XForY.ID IS NULL THEN 0 ELSE 1 END
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
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)
将为所有的情况下工作,除了dbo.Sales_XForY.ID = 0 – 2012-01-05 12:44:17
@OlegDok:好点。虽然,虽然MySQL不会允许IDENTITY(1,1),但MySQL不会允许0,所以*可能*将会是OK – gbn 2012-01-05 12:48:50
yep,但是你一定知道 - 如果发生什么事情 - 它会发生,特别是在DB 8-) – 2012-01-05 12:51:09