Eu sei que no SQL Management Studio posso clicar com o botão direito do mouse em uma tabela/gatilho/chave e script object as...
. Existe uma maneira de fazer isso programaticamente, dado o nome de um objeto?
Em caso afirmativo, existe uma maneira de encontrar todos os objetos (chaves primárias, chaves estrangeiras, gatilhos) associados a uma determinada tabela e fazer o script de todos eles programaticamente?
Esta é uma técnica em C # usando objetos de gerenciamento de servidor - não conheço uma maneira de fazer isso em T-SQL puro.
Uma maneira de começar com isso seria a seguinte:
A "tabela" SysDepends lhe dirá quais objetos são dependentes de outro. É hierárquico, então você pode ter que executar recursivamente através de SysDepends até começar a obter nulos. Às vezes, sysdepends está incompleto, aqui está um artigo com algumas outras sugestões .
A "tabela" de SysObjects lhe dirá algumas coisas sobre os objetos no banco de dados. As colunas de tipo (também xtype) informam qual é o item: tabela definida pelo usuário, procedimento armazenado, gatilho, etc.
Então você vai querer sp_helptext para cuspir o texto de um procedimento armazenado. Isso não reproduzirá o texto de um procedimento armazenado criptografado.
Qualquer solução total e completa envolverá a programação de algo, especialmente quando procedimentos armazenados criptografados e gatilhos estiverem envolvidos. Um artigo de amostra sobre como determinar programaticamente os itens no banco de dados. O tipo de dados necessário para descriptografar os procs armazenados do SQL Server 2000 apareceu no SQL Server 2005, então você não poderia usar o SQL no SQL Server 2000 para descriptografar seus próprios procs armazenados criptografados (mas você poderia descriptografá-los no SQL no SQL Server 2005) e seria não me surpreenderia se o mesmo fosse verdade para a transição de 2005 para 2008. Perdi o interesse em descriptografar procedimentos armazenados há vários anos.
Eu sei como encontrar programaticamente todas as informações necessárias para fazer o script dos objetos. Mas, para realmente fazer o script, talvez você mesmo precise escrever o código de geração do script.
Se você está escrevendo código para descobrir tudo sobre os objetos existentes, o termo para pesquisar no Google é "dicionário de dados do SQL Server".
Vou dar alguns exemplos iniciais.
Para encontrar todas as restrições de chave estrangeira em uma tabela específica:
Para encontrar todas as restrições de chave estrangeira que fazem referência a uma tabela específica: