我有一个表被删除并在几毫秒内重新创建(不能插入和删除)。当然,有时当另一个存储过程正在运行并尝试调用该表时会发生这种情况。我怎么能避免这个?我已经尝试了等待' xx秒和不同类型的循环要等到表回来,但我仍然得到错误说该表不存在或(无效的对象名称' xxxx')感谢您的帮助。
答案 0 :(得分:1)
删除并重新创建事务中的表。
当你从/向它读/写时,确保你的事务隔离级别是READ COMMITTED。
这样,表应该始终存在,因为在提交删除和创建表的事务之前,您的读/写不会发生。
我认为这是对的,所以我希望有所帮助。
答案 1 :(得分: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