日期:2014-05-17  浏览次数:20557 次

高人帮我解答下,为什么if不成立,也执行了begin的语句?
局域网有几台sql数据服务器,每台服务器存有不同的数据,我想在其中的一台服务器中执行,用户输入条件,判断去连接哪个服务器查询.

假设,我赋予A的值是'0006',是否应该直接执行最后一个条件? 可是,我现在测试,却会执行了第一个条件的begin。

请大家帮我解答下,或者这样测试,就算前面2个服务器不存在,最后一个数据库存在,当我前面2个条件都不满足,他为什么不执行最后一条查询呢?

SQL code

if '0005'='a'
begin

select xm,bj,km
          from opendatasource(
               'sqloledb',
               'data source=192.168.1.99;User ID=sa;Password=hhdsql1'
).my.dbo.tb1 

end

else if '0009'='a'
begin

select xm,bj,km
          from opendatasource(
               'sqloledb',
               'data source=192.168.1.98;User ID=sa;Password=hhdsql2'
).my.dbo.tb1 

end

end

else 
begin

select xm,bj,km
          from opendatasource(
               'sqloledb',
               'data source=192.168.1.97;User ID=sa;Password=hhdsql3'
).my.dbo.tb1 

end
end




------解决方案--------------------
不知道是楼主写错了,还是楼主对程序的理解出现偏差。
第一个else
后面有两个end,第二个end 与哪一个begin对应?程序没有贴完整?
------解决方案--------------------
逻辑是没有问题的,这肯定执行第三个

SQL code
if '0005'='a'
begin

select 1

end

else if '0009'='a'
begin

select 2

end

else 
begin

select 3

end

------解决方案--------------------
没看到你的赋值,if '0005'='a' 中'a'都是常量,应该是 if '0005'=@a
------解决方案--------------------
探讨
引用:

楼主,你自己有sql服务器吗?你可以试试,情况很特殊,
假设第一个条件的sql不存在的情况。 执行出错。

你不是楼主吗