冒着问一些愚蠢的东西的风险,但谷歌fu不容易得到,但是如何从同义词的基本对象中查询数据库ID(和其他信息)?
有问题的同义词是远程的(指向同一服务器上另一个数据库上的表)。基础对象本身并不固定:每次执行过程时不同数据库上的同一张表。
我想要一个非特定的方法(例如:不想依赖解析base_object_name
sys.synonyms 上的列),但如果有人告诉我这是唯一的选择,我会理解的。
既然它引出了一个问题:并发不是问题,只有一个客户端会调用该过程。
冒着问一些愚蠢的东西的风险,但谷歌fu不容易得到,但是如何从同义词的基本对象中查询数据库ID(和其他信息)?
有问题的同义词是远程的(指向同一服务器上另一个数据库上的表)。基础对象本身并不固定:每次执行过程时不同数据库上的同一张表。
我想要一个非特定的方法(例如:不想依赖解析base_object_name
sys.synonyms 上的列),但如果有人告诉我这是唯一的选择,我会理解的。
既然它引出了一个问题:并发不是问题,只有一个客户端会调用该过程。
这将适用于所有三部分名称,以及服务器是本地实例的所有四部分名称。
如果你得到
NULL
它,要么是因为同义词只有两部分(例如,它引用了当前数据库中的一个对象),要么是同义词中列出的数据库不再存在(它可能已被重命名、删除等)。如果四部分名称引用远程服务器,您将无法使用
DB_ID()/DB_NAME()
,您必须加入远程服务器master.sys.databases
- 这将涉及首先解析正在使用的链接服务器,然后构造一些动态 SQL。只是提到这一点;对于您的用例来说,这似乎不是问题。如果您只想限制为 3 部分名称,您可以添加这些谓词: