作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试解决一个问题,“如果服务器不可用,则不执行 oracle 查询”,脚本会检查 LINKED 服务器 ORACLE 是否可用,并使用如下结果更新 SQL Server;
declare @srvr nvarchar(128), @retval int;
set @srvr = 'ORA_SVC';
begin try
exec @retval = sys.sp_testlinkedserver @srvr;
end try
begin catch
set @retval = sign(@@error);
end catch;
if @retval = 1 Update ORACLE_AVAIL set AVAILABLE = 0
if @retval = 0 Update ORACLE_AVAIL set AVAILABLE = 1
go
所以...上面的代码效果很好!如果我通过修改 TNSNames.ORA 文件终止 ORACLE 连接...等到 SQL 服务器刷新它的连接,上面的代码找不到链接服务器并更新数据库,所以我们在这里很好。
在上面的 GO 之后是这段代码和我的问题。
DECLARE @ORACLE_ACTIVE BIT
set @ORACLE_ACTIVE = (select AVAILABLE from ORACLE_AVAIL)
if @ORACLE_ACTIVE = 1 GOTO ORACLE_IS_DOWN
INSERT into MY_SQL_SERVER_TABLE (COLUMN1,COLUMN2,COLUMN3)
select COLUMN1,COLUMN2,COLUMN3 from ORA_SVC..ORA_SVC.ORACLE_TABLE
ORACLE_IS_DOWN:
如果 Oracle 服务器离线,我的脚本的上述部分将失败,无论 @Oracle_Avail If 语句如何。
如果我修改代码为;
DECLARE @ORACLE_ACTIVE BIT
set @ORACLE_ACTIVE = (select AVAILABLE from ORACLE_AVAIL)
if @ORACLE_ACTIVE = 1 GOTO ORACLE_IS_DOWN
PRINT 'GOTO DIDNT WORK'
ORACLE_IS_DOWN:
Print 语句按预期被忽略。如果@ORACLE_ACTIVE = 1 即是。
GOTO 不好,我明白了。如果链接服务器不存在(TNSNames.ora 文件指向无效主机),IF ELSE 在这里也不起作用,无论 if @ORACLE_ACTIVE 检查如何,脚本都会失败。
感谢您的宝贵时间。我真的希望我的措辞是正确的,因为我没有通过搜索引擎找到解决方案
最佳答案
我的猜测是,在解析期间,SQL Server 会尝试验证您的查询。也许它正在尝试查看这些列是否存在。
您可以通过将查询移动到内部范围来延迟解析:
exec N'INSERT into MY_SQL_SERVER_TABLE (COLUMN1,COLUMN2,COLUMN3)
select COLUMN1,COLUMN2,COLUMN3 from ORA_SVC..ORA_SVC.ORACLE_TABLE'
关于sql-server - Transact SQL 跳过 GOTO 或 IF ELSE 当链接服务器在代码中时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25294606/
我是一名优秀的程序员,十分优秀!