0

我有一个在几毫秒内被删除和重新创建的表(不能只是插入和删除)。当然,当另一个存储过程正在运行并试图调用该表时,有时会发生这种情况。我将如何避免这种情况?我已经尝试了'waitfor' xx 秒和不同类型的循环来等待表返回,但我仍然收到错误消息说表不存在或(无效的对象名称'xxxx')感谢您的帮助。

4

2 回答 2

1

在事务中删除并重新创建表。

当您从/向它读取/写入时,请确保您的事务隔离级别为已读。

这样,表应该始终存在,因为在提交删除和创建表的事务之前不会发生读/写。

我认为这是对的,所以我希望这会有所帮助。

在此处输入链接描述

于 2016-01-22T13:39:51.690 回答
0

在尝试访问它之前,您需要检查该表是否存在。您可以执行以下操作:

IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = 'Schema' 
                 AND  TABLE_NAME = 'Table'))
BEGIN
    -- Do stuff with the table
END

另一种选择是通过使用 TRY/CATCH 和动态 SQL 来处理架构错误,如下所示:

BEGIN TRY

DECLARE @sql nvarchar(100)

SET @sql = 'SELECT * FROM NonExistentTable'

EXEC sp_executesql @sql

END TRY

BEGIN CATCH

SELECT'Do stuff here'

END CATCH
于 2016-01-22T13:38:49.577 回答