答案 0 :(得分:2)
假设您使用的是SQL Server 2005或更高版本,则可以对脚本中的每个语句使用不同的TRY / CATCH块。这是一个例子:
DECLARE @errorLog TABLE (
row_id INT NOT NULL IDENTITY(1,1),
error_msg NVARCHAR(4000)
)
/** Create the table **/
BEGIN TRY
CREATE TABLE t1 (RowID INT NOT NULL)
END TRY
BEGIN CATCH
INSERT @errorLog (error_msg)
SELECT ERROR_MESSAGE()
END CATCH
/** Create the table again - will raise an error message **/
BEGIN TRY
CREATE TABLE t1 (RowID INT NOT NULL)
END TRY
BEGIN CATCH
INSERT @errorLog (error_msg)
SELECT ERROR_MESSAGE()
END CATCH
/** Create the index **/
BEGIN TRY
CREATE INDEX IX_t1 ON t1 (RowID)
END TRY
BEGIN CATCH
INSERT @errorLog (error_msg)
SELECT ERROR_MESSAGE()
END CATCH
/** Return the errors **/
IF EXISTS (SELECT * FROM @errorLog)
SELECT error_msg FROM @errorLog
/** Confirm it worked **/
EXEC sp_help 't1'
此脚本将在失败后继续处理。如果存在错误,它们将在结果集中返回。因此,您需要更改原始代码,但我认为您可能不得不在一个脚本中容纳多个错误。
另一方面,可以在脚本本身轻松处理重复索引错误之类的事情(即检查对象是否已存在)。由于此解决方案需要对原始脚本进行大量更改,因此这可能是更好的选择。
答案 1 :(得分:-1)
你发布的内容只是你对'scriptinfo'所包含的内容的执行调用。
'scriptinfo'的文字是什么?这就是你需要查看/内置对失败的CRUD /事务/等进行优雅处理的地方。
如果您可以发布'scriptinfo',也许我可以给您一些想法。