Sql server 绕过SQL Server中的错误
在SQL Server中将多行插入到表中时,如果a出现错误,我如何记录该错误并通过绕过该错误继续插入下一条记录?当所有插入都一次性运行时(如在Sql server 绕过SQL Server中的错误,sql-server,Sql Server,在SQL Server中将多行插入到表中时,如果a出现错误,我如何记录该错误并通过绕过该错误继续插入下一条记录?当所有插入都一次性运行时(如在插入到…选择中)。数据库实现ACID,其中一个组件(a,原子性)意味着(根据): 原子性要求每个事务都是“全部或无” 这意味着您必须在单个语句中分离您的操作,而在SQL Server中,这些语句是单个事务(另一方面,在Oracle中,由于默认情况下,它在一个事务中运行所有后续查询,因此这仍然不起作用) 您可以创建单独的insert语句,并将每个语句放在一个
插入到…选择中)。数据库实现ACID,其中一个组件(a,原子性)意味着(根据):
原子性要求每个事务都是“全部或无”
这意味着您必须在单个语句中分离您的操作,而在SQL Server中,这些语句是单个事务(另一方面,在Oracle中,由于默认情况下,它在一个事务中运行所有后续查询,因此这仍然不起作用)
您可以创建单独的insert语句,并将每个语句放在一个单独的insert语句中
样本:
-- first
begin try
insert into ...
end try
begin catch
-- log error
end catch;
-- second
begin try
insert into ...
end try
begin catch
-- log error
end catch;
谢谢Patrick,但我听到并尝试在插入后添加GO,它实际上会插入下一条记录。就此而言,更新也会成功。另外,你能告诉我哪些表日志被存储,或者我如何手动存储日志吗?我不知道是否有保存此类错误的默认日志位置(我不这么认为)。有一个选项,但这可能不是您想要的。您可以使用try…catch
,如果出现错误,您可以自己插入日志表。谢谢。但使用“go”只显示错误并继续输入下一条记录。它不会停止。这是怎么回事?我认为这在SQL Server Management Studio中有效,但在calli来自外部代码的ng。