2010-07-19 2 views
0

Допустим, у нас есть таблица A с идентификатором столбца первичного ключа. Теперь эта таблица находится в отношении внешнего ключа, и в этом столбце скажем n других таблиц.Проверьте наличие определенного идентификатора или значения в нескольких таблицах

Мне нужно создать хранимую процедуру, которая примет идентификатор в качестве параметра и вернет 1 или 0 в зависимости от значения идентификатора, присутствующего в любой другой таблице.

Так напр, если ID = 3, и любой из п таблиц содержит 3 СП должна возвращать 1 еще 0.

Что является лучшим способом для достижения этой цели?

Один из способов - запустить n разных запросов и обработать каждый результат. Но выглядит довольно неуклюжим.

Спасибо.

ответ

1
IF EXISTS 
(
    SELECT * 
    FROM 
     A 
     INNER JOIN B ON A.Id = B.Id 
     INNER JOIN C ON A.Id = C.Id 
     INNER JOIN D ON A.Id = D.Id 
) 
BEGIN 
    SELECT 1 
END 
ELSE 
BEGIN 
    SELECT 0 
END 

Довольно подобный подход к Иоганну. Я уверен, что это можно сделать с помощью системных таблиц, используя найденные там отношения, но это потребует больших усилий. Будут ли эти таблицы изменяться достаточно, чтобы сделать это стоящим?

1

Вы можете сделать что-то вроде этого

select case when (isnull (b.id, 0)) = 0 then case when isnull (c.id, 0) = 0 then 0 else 1 end else 1 end 
from a 
left outer join b on a.id = b.id 
left outer join c on a.id = c.id 

просто добавить еще один присоединиться и т.д.

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