SQL过程中的超时
我正在使用下面的sql从内部网的文件中导入一些数据。然而,每隔一段时间,就会有一个超时错误,进程就会失败,这就是我使用事务的原因。如果事务失败,我希望清除ImportedTable。然而,这似乎没有发生。这里有我遗漏的东西吗SQL过程中的超时,sql,tsql,stored-procedures,Sql,Tsql,Stored Procedures,我正在使用下面的sql从内部网的文件中导入一些数据。然而,每隔一段时间,就会有一个超时错误,进程就会失败,这就是我使用事务的原因。如果事务失败,我希望清除ImportedTable。然而,这似乎没有发生。这里有我遗漏的东西吗 ALTER PROCEDURE [dbo].[pr_ImportData] @StoreCode varchar(10), @UserId varchar(100) AS BEGIN TRANSACTION -- 1) Clear the data exec pr
ALTER PROCEDURE [dbo].[pr_ImportData]
@StoreCode varchar(10),
@UserId varchar(100)
AS
BEGIN TRANSACTION
-- 1) Clear the data
exec pr_INTRANET_ClearData @StoreCode, @UserId
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
GOTO EXIT1
END
-- 2) Add the new data to the history Table
INSERT INTO data_History (...)
SELECT ... from ImportedTable WHERE StoreCode = @StoreCode and UserId = @UserId
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
GOTO EXIT1
END
-- 3) Add the data to the live table
INSERT INTO data_Live (...)
SELECT ... from ImportedTable WHERE StoreCode = @StoreCode and UserId = @UserId
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
GOTO EXIT1
END
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
GOTO EXIT1
END
EXIT1:
-- 4) Delete the rows from the temp table
DELETE FROM ImportedTable WHERE StoreCode = @StoreCode and UserId = @UserId
COMMIT TRANSACTION
更新1:我正在对SQL2000和SQL2005运行此功能
更新2:澄清:ImportedTable永远不会在Exit1时被清除。将在回滚事务时出错,从而消除在出错时显式回滚的需要。您还应该考虑使用开始尝试/开始捕获,这比在每个语句之后检查@ @错误程序要容易得多。会有任何错误来回滚事务,消除了在出现错误时需要显式回滚的必要性。您还应该考虑使用开始尝试/开始捕获,这比在每个语句之后检查@ @错误程序要容易得多。是否PRR.InTruttSeCuffDATA返回错误代码?我认为@错误对这样的调用不起作用。尝试声明@Error,然后设置exec@Error=pr\u INTRANET\u ClearData@StoreCode、@UserId。确保pr_INTRANET_ClearData从过程中返回@错误或自定义错误代码。它可能会挂断该过程所做的一切。pr_INTRANET_ClearData是否返回错误代码?我认为@错误对这样的调用不起作用。尝试声明@Error,然后设置exec@Error=pr\u INTRANET\u ClearData@StoreCode、@UserId。确保pr_INTRANET_ClearData从过程中返回@错误或自定义错误代码。它可能会挂断该过程所做的一切。SET XACT_ABORT将在这两种情况下都起作用。Try/Catch仅适用于SQL2005和up。SET XACT_ABORT将在这两种情况下工作。Try/Catch仅适用于SQL2005及以上版本。