2016-01-22 66 views
0

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

+0

你我必须张贴一些示例代码 – TheGameiswar

+1

什么就可以被丢弃/重新创建表的原因是什么?为什么不简单[[TRUNCATE]](https://msdn.microsoft.com/zh-cn/library/ms177570.aspx)表? –

回答

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 
+0

如果object_id('YourTable')!= null ............ – AntDC

+0

这也可以工作,但你也需要指定模式。 –

+0

但是,如果你是“已经在那个模式中”,你就没有。 公平点,但不清楚OP是否是。 – AntDC

1

删除和事务中重新创建表。

当您从/中读取/写入数据时,请确保事务隔离级别为READ COMMITTED。

这样,表应该总是在那里,因为直到删除和创建表的事务被提交之前,您的读/写操作才会发生。

我认为这是正确的,所以我希望有所帮助。

enter link description here