2012-01-05 2 views
2

Я пытаюсь написать запрос, который будет устанавливать значение бита на основе того, является ли другой столбец нулевым или нет.Обновить столбец до значения BIT на основе результата null запроса

Например:

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

Я получаю ошибку синтаксиса на ключевое слово NOT, но я не могу понять, как исправить запрос.

ответ

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 –

+0

@OlegDok: хороший момент. Everyine делает IDENTITY (1,1), хотя и MySQL не разрешает 0, поэтому * возможно, будет 0 – gbn

+0

yep, но вы наверняка знаете - если что-то может произойти - это происходит, особенно в DB 8-) –

Смежные вопросы