2013-05-14 1 views
0

Я работаю над проблемой в течение нескольких часов, и мне кажется, что я бегу по кругу.IF EXISTS условия в нескольких заявлениях, соединенных соединением

Я пишу скрипт, который проверяет таблицу и старую базу данных на новую, и хочет также увидеть, есть ли различия в таблицах. Я проделал эту часть, но хочу облегчить чтение. Я в идеале хочу, чтобы результат выполнялся, когда в таблице есть записи, что означает наличие различий. Поэтому, если есть различия в таблицах 1, 4 и 8, вывод будет отображаться в таблице 1, таблице 4, таблице 8. Я добавлю фрагмент кода, но мне нужно изменить некоторые вещи из соображений конфиденциальности.

if exists(
SELECT 'xyz' AS TableName, 1 FROM table1CD 
LEFT JOIN database2 CL ON CL.X= CAST(CD.X AS VARCHAR(100)) AND CL.Type = 'type1' 
WHERE CL.Type IS NULL 
) 
Select TableName 
Else 

UNION 

else if exists(
SELECT 'abc' AS TableName, 1 FROM table3 CA 
LEFT JOIN database2 CL ON CL.X = CAST(CA.Y AS VARCHAR(100)) AND CL.Type = 'type2' 
WHERE CL.Type IS NULL 
) 
Select TableName 
Else 

union 

more tables with repeating structure 

Im все еще очень новый с этим видом SQL. Я получаю ошибки, когда я запускаю это и постоянно меняю его, чтобы попытаться понять это, но Im на стене сейчас.

+0

Итак, вы хотите получить список, предположительно, в виде dataest в одну колонку из таблицы, есть различия? Или только первая таблица, с которой вы сталкиваетесь с различиями (как подразумевается вашей логикой if/else)? –

+0

Список, в котором перечислены все таблицы, которые имеют разницу. –

ответ

1

Если вам нужен только список, вы можете сохранить его самостоятельно в табличную переменную, например:

declare @Tables table (TableName varchar(100)); 


if exists(
      SELECT 'xyz' AS TableName, 1 FROM table1CD 
      LEFT JOIN database2 CL ON CL.X= CAST(CD.X AS VARCHAR(100)) AND CL.Type = 'type1' 
      WHERE CL.Type IS NULL 
) 
insert into @Tables 
    select 'Table1' 

if exists(
     SELECT 'abc' AS TableName, 1 FROM table3 CA 
     LEFT JOIN database2 CL ON CL.X = CAST(CA.Y AS VARCHAR(100)) AND CL.Type = 'type2' 
     WHERE CL.Type IS NULL 
) 
insert into @Tables 
    select 'Table3' 



select * from @Tables; 
+0

О, потрясающе, и это будет работать с большим количеством заявлений? У меня возникли проблемы с его выходом, когда у меня было 2+. О, я бы не хотел их объединять, хорошо спасибо, это имеет смысл для меня –