我遇到了try/catch错误处理问题。 让我们在我的(简单)的代码来看看:SQL-Server,TSQL,TRY-CATCH块
BEGIN TRY
print 'important'
use myDB1; -- no problem, the myDB1 is in place...
select * from dbo.Tab1;
use myDB2;
--here error, the myDB2 is not there,
--but error handling doesn't jump into catch-block
select * from dbo.Tab2;
END TRY
BEGIN CATCH
print 'myDB2 is not there'
END CATCH
我知道,我可以说:
select * from myDB2.dbo.Tab2
而不改变为MYDB2,但是当我需要检查(例如..)如果表有一个标识
(((SELECT OBJECTPROPERTY(OBJECT_ID('myDB2.dbo.'+ @TableName), 'TableHasIdentity'))= 1)
我必须从MYDB2运行它,否则我会得到一个错误的结果。 那么如何捕捉catch-block中的错误呢?
感谢您的帮助
Purclot
您是否试图使用完全限定的名称而不是更改数据库上下文,如select * from myDB2.dbo.Tab2? – jean
顺便说一句,如果你想检查数据库和对象是否存在,为什么不从sys.sysdatabases和sys.sysobjects中选择? – jean
嗨,让我, 正如我所说:我需要改变到数据库(所以它不是一个解决方案:select * from myDB2.dbo.Tab2 ...)。 当我使用:if(存在(从master.dbo.sysdatabase选择其中[名称] ='myDB2')1使用myDB2,我会得到一个错误 – Purclot