Estou usando este T-SQL para obter estatísticas de índice (editado para brevidade):
SET @db_id = DB_ID(N'TestDB');
SET @object_id = OBJECT_ID(N'TestDB.dbo.Users');
SELECT * FROM sys.dm_db_index_physical_stats(@db_id, @object_id, NULL, NULL , 'LIMITED');
Eu quero ser capaz de encapsular isso em um procedimento armazenado e chamá-lo para qualquer banco de dados em que o procedimento armazenado esteja, mas o nome do banco de dados é codificado, como posso obter o nome do banco de dados dinamicamente?
O T-SQL tem algo como:
SET @db_id = DB_ID(este);
Se
db_id()
for chamado sem parâmetro retorna o id do banco de dados atual - http://msdn.microsoft.com/en-us/library/ms186274.aspxentão você poderia apenas usar:
set @db_id=db_id()
E depois de ler o restante da pergunta, você pode ligar
object_id()
sem o nome db. Se o objeto existir, você obterá o id, caso contrário,NULL
. Então:SET @object_id = OBJECT_ID(N'dbo.Users');