0

我在数据库上有一个存储过程A
我们称之为存储过程sp_a
在这个存储过程中,我希望对另一个数据库 database 上的表进行左连接B
我们称这张桌子为tbl_b

所以,我会写这样的东西:

use A

select *
from tbl_a a
left join B.dbo.tbl_b b on a.ID = b.AID

B如果数据库已启动并正在运行,这将起作用。
但有时,情况并非如此。但是,我希望我的存储过程忽略该数据库B“不存在”而忽略左连接。如果数据库可以访问
,我在调用存储过程之前就知道了。 如何防止必须编写整个存储过程两次,唯一的区别是如果我知道数据库无法访问,我不包括左连接?B
B

4

1 回答 1

0

您可以使用HAS_DBACCESS函数:

IF HAS_DBACCESS('[database name]') = 1
 begin    
  select *
  from tbl_a a
  left join B.dbo.tbl_b b on a.ID = b.AID
 end
else 
  begin
        select *
        from tbl_a a
 end
于 2020-10-07T14:20:56.580 回答