元芳,你怎么看? 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 数据源的方法
如果你这个是长期使用建议见个连接服务器
你测试一下链接服务器会不会出这种情况
[解决办法]
[解决办法]
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)
[解决办法]
[解决办法]
第一个if报错le,它再怎么往下走啊?
这又不是try 。。。catch 。。。 finaly。。。。
[解决办法]