当在视图中执行查询出错时,我正在尝试向我的日志添加一个警报,以便将视图运行插入表中。当我单独运行视图时,我在 SUBSTRING 中得到一个无效的输入(我不记得错误的确切措辞)。当我将它作为视图的一部分运行时-> 表存储过程,该错误被忽略,然后我必须去挖掘有问题的行并在视图的代码中创建一个异常以从结果中省略该行(我知道,它听起来很杂乱,但我正在从专门的 web 应用程序中对巨大的 web 日志文件进行数据缩减),但我离题了。
我尝试了两种不同的方法来尝试捕获错误,但都没有以在我的执行结果表 (refresh_results) 中插入指示错误的行的方式触发。我想我可能遗漏了一些基本知识——也许错误正在以某种方式被封装。如果我无法检测到错误,那么注意到错误的唯一方法是如果有人注意到表中的条目数在给定的时间段内很低。
SELECT @TransactionName = 'tname';
BEGIN TRANSACTION @TransactionName;
BEGIN TRY
print 'tname ***In Try***';
if exists (select name from sysobjects where name='tablename')
begin
drop table tablename;
end
select * into tablename
from opendatasource('SQLNCLI', 'Data Source=DATABASE;UID=####;password=####').dbo.viewname;
COMMIT TRANSACTION @TransactionName;
END TRY
BEGIN CATCH
print 'tablename ***ERROR - check for SUBSTRING***';
begin transaction
set @result_table = 'tablename ***ERROR - check for SUBSTRING***'
select @result_time = getdate(),
@result_rows = count(logtime)
from tablename
insert INTO [dbo].[refresh_results] (result_time, result_table, result_rows)
values (@result_time, @result_table, @result_rows);
commit transaction
ROLLBACK TRANSACTION @TransactionName;
END CATCH
或者
if exists (select name from sysobjects where name='tablename')
begin
drop table tablename;
end
select * into tablename
from opendatasource('SQLNCLI', 'Data Source=DATABASE;UID=####;password=####').dbo.viewname;
print '@@error'
print @@error
if @@error <> 0
Begin
print 'tablename ***ERROR - check for SUBSTRING***';
set @result_table = 'tablename ***ERROR - check for SUBSTRING***'
select @result_time = getdate(),
@result_rows = count(logtime)
from tablename
insert INTO [dbo].[refresh_results] (result_time, result_table, result_rows)
values (@result_time, @result_table, @result_rows);
End