Sql 如果在由联合联接的多个语句中存在条件

Sql 如果在由联合联接的多个语句中存在条件,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我已经在一个问题上工作了几个小时,我觉得自己在兜圈子 我正在编写一个脚本,它将从一个表和一个旧数据库检查一个表到一个新数据库,它也想看看表中是否有差异。我已经完成了这一部分,但希望使输出更易于阅读。理想情况下,我希望在表中有记录时发生输出,表示存在差异。因此,如果表1、4和8中存在差异,那么输出将是表1、表4和表8。我将添加一段代码,但出于隐私原因,我需要更改一些内容 if exists( SELECT 'xyz' AS TableName, 1 FROM table1CD LEFT JOI

我已经在一个问题上工作了几个小时,我觉得自己在兜圈子

我正在编写一个脚本,它将从一个表和一个旧数据库检查一个表到一个新数据库,它也想看看表中是否有差异。我已经完成了这一部分,但希望使输出更易于阅读。理想情况下,我希望在表中有记录时发生输出,表示存在差异。因此,如果表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

我对这种SQL仍然很陌生。当我运行此程序并不断更改它以尝试解决问题时,我会出错,但我现在遇到了麻烦。

如果您只需要一个列表,您可以自己在表变量中维护它,如:

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;

那么,您想要一个列表,大概是一列dataest形式的,有差异的表的列表吗?或者仅仅是您遇到差异的第一个表(如您的if/else逻辑所暗示的)?一个列出所有有差异的表的列表。哦,太棒了,这将适用于更多的语句?当我有2+时,我很难将它输出。哦,我不必把他们联合起来,好的,谢谢这对我来说很有意义