sql server 2008 r2 - условная псевдоколонка - PullRequest
2 голосов
/ 15 мая 2011

У меня есть две таблицы. Одно из событий и одна из статей.
Каждое событие имеет связанную статью, но статьи могут существовать без соответствующих событий.
Я хочу получить список всех статей и иметь псевдостолбец bool, который указывает, имеет ли статья связанное событие или нет.
Т.е., если в [Events] существует строка, где ArticleID = текущий ArticleID, тогда true, если не false.

Ответы [ 3 ]

3 голосов
/ 15 мая 2011

Использовать постоянный вычисляемый столбец

Сначала создайте функцию для возврата true или false

-- This function will provide the computed column definition 
CREATE FUNCTION udf_article_has_events ( @id int ) 
RETURNS bit  
WITH SCHEMABINDING
AS 

BEGIN   

DECLARE @retval bit

set @retval = 0
if exists(select * from [Events] where ArticleId = @id) 
    set @retval = 1


RETURN @retval

END

Затем добавьте вычисляемый столбец, как этот

Alter TABLE [dbo.Article] Add HasEvents As dbo.udf_events_exist(id) 
1 голос
/ 15 мая 2011

Создать вид из этого

 SELECT *, CASE
             WHEN E.ArticleID IS NULL THEN false 
             ELSE true
           END as EventExist
 FROM Article A
 LEFT JOIN Events E ON A.ArticleID = E.ArticleID
1 голос
/ 15 мая 2011

Если значение необходимо сохранить, вам потребуется триггер после вставки и удаления в таблице событий для обновления столбца Article.HasEvents

CREATE TRIGGER SetHAsEvents
ON dbo.[Events]
FOR INSERT 
AS
   Update Article Set HasEvents = dbo.udf_article_has_events(inserted.ArticleId)
   Where Id = inserted.ArticleId
GO

Дополнительное преимущество постоянного столбца в том, что он может быть проиндексирован

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...