读书人

元芳,你如何看? if不成立,却执行了第一

发布时间: 2012-11-21 08:23:26 作者: rapoo

元芳,你怎么看? if不成立,却执行了第一个条件,导致报错......
我测试很多次了,下面第一个sql执行是执行最后一个,没问题我知道。但是第二个不行。
先了解我的情况:局域网,有多台sql数据服务器,我想在其中的一台,执行通过判断条件,执行不同的sql查询语句(如第二个)。 请问,就算我第二个sql的中前面2个数据库没开机,(最后一个else的数据库肯定正常),但是只要我条件不成立,是否应该直接执行最后一个条件? 很多人说是, 但是,实验却不行,直接在第一个条件执行,报错了,说第一个条件数据库不存在。 不信的话,建议可以用自己sql测试做最后一个条件测试一下。。。。。 求高人解答。 谢谢!


SQL code
if '0005'='0008'beginselect 1endelse if '0009'='0008'beginselect 2endelse beginselect 3end





SQL code
if '0005'='0008'beginselect xm,bj,km          from opendatasource(               'sqloledb',               'data source=192.168.1.99;User ID=sa;Password=hhdsql1').my.dbo.tb1 endelse if '0009'='0008'beginselect xm,bj,km          from opendatasource(               'sqloledb',               'data source=192.168.1.98;User ID=sa;Password=hhdsql2').my.dbo.tb1 endelse beginselect xm,bj,km          from opendatasource(               'sqloledb',               'data source=192.168.1.97;User ID=sa;Password=hhdsql3').my.dbo.tb1 end


[解决办法]
sql编译,不管你的分支判断,首先会检查你的sql是否可以执行,这就是编译性语言与解释性语言的区别。
[解决办法]
上个帖子回复你了,确实存在楼主说的这个问题,很纳闷

openrowset opendatasource 之类的是用于临时性的访问OLE DB 数据源的方法
如果你这个是长期使用建议见个连接服务器
你测试一下链接服务器会不会出这种情况
[解决办法]
探讨

sql编译,不管你的分支判断,首先会检查你的sql是否可以执行,这就是编译性语言与解释性语言的区别。

[解决办法]
declare @sql varchar(500)
if '0005'='0008'
begin

set @sql='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'='0008'
begin


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


end

else
begin

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

end

exec(@sql)
[解决办法]
探讨

引用:

sql编译,不管你的分支判断,首先会检查你的sql是否可以执行,这就是编译性语言与解释性语言的区别。

如果这么解释
那么下面的编译这么不会有问题呢

if '0005'='0008'
begin

select 1/0

end

else if '0009'='0008'
begin

select 2/'a'

……

[解决办法]
第一个if报错le,它再怎么往下走啊?

这又不是try 。。。catch 。。。 finaly。。。。


[解决办法]
探讨

引用:

select 1/0 编译是没有问题的
此话当真?

读书人网 >SQL Server

热点推荐