2012-01-05 4 views
2

別の列がNULLかどうかに基づいてビット値を設定するクエリを作成しようとしています。例えばis nullクエリの結果に基づいてBIT値に列を更新します。

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

私は、NOTキーワードの構文エラーを取得していますが、私は、クエリを修正する方法を見ることができません。いずれかが非ゼロ、非null値が1になる。それはあなたのことを前提としています

答えて

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 

を持っていません良い点:もちろんのID値として0を持つことはありません...

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

はdbo.Sales_XForY.ID = 0 –

+0

@OlegDokを除き、すべてのケースのために働くだろう。 EveryineはID(1,1)を実行しますが、MySQLは0を許可しません。*おそらく*はOKでしょう。 – gbn

+0

あなたは確かに知っています - もし何か起こることがあれば、特にDB 8-です) –

関連する問題