2012-01-05 108 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