IF EXISTS由联盟加入的多个语句中的条件

时间:2013-05-14 22:47:02

标签: sql sql-server sql-server-2008

我一直在研究一个问题几个小时,我觉得我在圈子里跑。

我正在编写一个脚本,它会将一个表和旧数据库检查到一个新的数据库,它也希望看到表中是否存在差异。我已完成此部分,但希望使输出更容易阅读。理想情况下,当表中有记录时,我想要输出,表示存在差异。因此,如果表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还很新。当我运行这个并且不断改变它以试图解决它但我现在在墙上时,我遇到了错误。

1 个答案:

答案 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;