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