Uma pesquisa no Google divulgou milhões de ocorrências sobre como encontrar tabelas sem indexação em cluster, o PK normalmente sendo o índice em cluster de uma tabela. No entanto, uma tabela pode facilmente ter uma chave natural como índice clusterizado e um índice substituto não clusterizado, como uma coluna de identidade.
Como localizo todas as tabelas em um banco de dados sem uma chave primária definida? Eu tenho 245 tabelas neste banco de dados: a inspeção manual é extremamente ineficiente.
sys.tables
função.objectproperty()
.A solução de Mike é excelente para o problema específico.
Se você quiser mais flexibilidade, aqui está uma alternativa que pode ser facilmente transformado em uma consulta que retorna outras informações, tais como encontrar todas as tabelas que são montes, ou encontrar tabelas que não têm restrições exclusivas em tudo .
Quando seu (sub) sistema ultrapassar ~ 50 tabelas, é realmente importante se familiarizar com todas as tabelas de metadados, porque, como você disse, passar por cada tabela manualmente é impraticável (e propenso a erros!).
fonte
O recurso de gerenciamento de políticas do SQL Server pode fazer isso.
A faceta da tabela possui os campos @HasIndex e @HasClusteredIndex (além de outros que podem ser úteis, como gatilhos). Uma política pode ser criada para verificar as condições em todas as tabelas, em todos os bancos de dados, em vários servidores (usando o recurso Central Management Server).
No entanto, ele não pode verificar a existência de um índice ou restrição de chave primária. Eu juraria que havia um campo @HasPrimaryKey, mas não existe no MSSQL2012. Estou me lembrando errado ou ficando louco.
Nota: O Policy Management está incluído nas edições SQL Server 2012 Enterprise, Business Intelligence e Standard. Não está disponível na edição Express.
fonte