Arriscando perguntar algo idiota, mas não obtido facilmente pelo Google-fu, mas como consultar o id do banco de dados (e outras informações) do objeto base de um sinônimo?
O sinônimo em questão é remoto (aponta para uma tabela em outro banco de dados no mesmo servidor). O objeto base em si não é fixo: é a mesma tabela em diferentes bancos de dados a cada execução do procedimento.
Eu gostaria de um método não específico (exemplo: não quero depender da análise da base_object_name
coluna em sys.synonyms), mas entenderei se me disserem que essa é a única opção.
E como isso levanta a questão: a simultaneidade não é um problema, apenas um cliente chamará esse procedimento.
Isso funcionará para todos os nomes de três partes e todos os nomes de quatro partes em que o servidor é a instância local.
Se você obtiver
NULL
, é porque o sinônimo tem apenas 2 partes (por exemplo, faz referência a um objeto no banco de dados atual) ou o banco de dados listado no sinônimo não existe mais (pode ter sido renomeado, descartado etc.).Se o nome de quatro partes fizer referência a um servidor remoto, você não poderá usar
DB_ID()/DB_NAME()
, terá que ingressar no servidor remotomaster.sys.databases
- o que envolveria primeiro analisar o servidor vinculado que está sendo usado e, em seguida, construir algum SQL dinâmico. Apenas mencionando isso; não parece ser um problema para o seu caso de uso.Se você deseja limitar apenas nomes de 3 partes, pode adicionar estes predicados: