&引用;当其他人则为空时“;在SQLServer2005中
&引用;当其他人则为空时“;在SQLServer2005中,sql,sql-server-2005,Sql,Sql Server 2005,tracking_table是一个日志表,声明如下: create table tracking_table (my_command nvarchar(500), my_date datetime); 请假设您在SQL SERVER 2005作业中声明了以下SQL SERVER 2005代码块: DECLARE @my_statement NVARCHAR(500) delete from tracking_table SET @my_statement = 'ALTER INDEX
tracking_table
是一个日志表,声明如下:
create table tracking_table (my_command nvarchar(500), my_date datetime);
请假设您在SQL SERVER 2005作业中声明了以下SQL SERVER 2005代码块:
DECLARE @my_statement NVARCHAR(500)
delete from tracking_table
SET @my_statement = 'ALTER INDEX ALL ON my_user.dbo.my_fact_table REBUILD WITH (FILLFACTOR = 90)'
insert into tracking_table values (@my_statement,getdate())
EXEC (@my_statement)
SET @my_statement = 'ALTER INDEX ALL ON my_user.dbo.my_second_table REBUILD WITH (FILLFACTOR = 90)'
insert into tracking_table (@my_statement,getdate())
EXEC (@my_statement)
在运行时,如果第一条语句(ALTER INDEX ALL ON my_user.dbo.my_fact_table REBUILD WITH(FILLFACTOR=90)
)失败,则不会执行作用于第二个表的第二条语句
我想知道如何修改SQL Server 2005代码,以便跳过任何错误(在Oracle中,我会说,,而其他代码则为NULL
)
我怎样才能做到这一点
提前感谢您的帮助。我不能建议您抑制错误,但如果您确实想这样做,我想您可以尝试:
declare @my_statement nvarchar(500)
begin try
delete from tracking_table
end try
begin catch
print null // or errormessage
end catch
begin try
set @my_statement = 'ALTER INDEX ALL ON my_user.dbo.my_fact_table REBUILD WITH (FILLFACTOR = 90)'
insert into tracking_table values (@my_statement,getdate())
exec (@my_statement)
end try
begin catch
print null // or errormessage
end catch
begin try
set @my_statement = 'ALTER INDEX ALL ON my_user.dbo.my_second_table REBUILD WITH (FILLFACTOR = 90)'
insert into tracking_table (@my_statement,getdate())
exec (@my_statement)
end try
begin catch
print null // or errormessage
end catch
您还可以创建一个过程
create procedure sp_executesql_Suppress_Errors
(
@stmt nvarchar(max)
)
as
begin
begin try
exec sp_executesql
@stmt = @stmt
end try
begin catch
print null // or errormessage
end catch
end
然后用你的陈述来称呼它。我还建议您使用
exec sp_executesql
而不是exec
(请参阅)您可以将每条语句放入自己的作业步骤中,然后定义发生故障时每个步骤的操作(停止执行、通过电子邮件通知、继续等)我只能使用一个工作步骤,所有代码都在里面。非常感谢您的友好合作。回答接受!再次感谢您的sp_抑制_错误程序!有用!!