Una búsqueda en Google arrojó millones de resultados sobre cómo encontrar tablas sin índice agrupado, siendo el PK normalmente el índice agrupado de una tabla. Sin embargo, una tabla podría tener fácilmente una clave natural como índice agrupado y un índice sustituto no agrupado, como una columna de identidad.
¿Cómo encuentro todas las tablas en una base de datos sin una clave primaria definida? Tengo 245 tablas en este DB: la inspección manual es muy ineficiente.
sys.tables
mismo da la identificación y gracias por mostrar esta maravillosa función.objectproperty()
está disponible desde 2005 en adelante, acabo de comprobar bol, ¿verdad?La solución de Mike es excelente para el problema específico.
Si desea más flexibilidad, esto es una alternativa que puede ser fácilmente se transformó en una consulta que devuelve otra información, como la búsqueda de todas las tablas que son montones, o la búsqueda de tablas que no tienen restricciones únicas en absoluto .
Una vez que su (sub) sistema supera las ~ 50 tablas, es realmente importante familiarizarse con todas las tablas de metadatos, porque como usted dijo, revisar cada tabla manualmente no es práctico (¡y propenso a errores!).
fuente
La función de administración de políticas de SQL Server puede hacer algo de esto.
La faceta Tabla tiene campos @HasIndex y @HasClusteredIndex (así como otros que pueden ser útiles, como los desencadenantes). Se puede crear una política para verificar las condiciones en todas las tablas, en todas las bases de datos, en varios servidores (utilizando la función Servidor de administración central).
Sin embargo, no puede verificar la existencia de un índice o restricción de clave primaria. Hubiera jurado que había un campo @HasPrimaryKey pero no está allí en MSSQL2012. Estoy recordando mal o me estoy volviendo loco.
Nota: La gestión de políticas se incluye con las ediciones SQL Server 2012 Enterprise, Business Intelligence y Standard. No está disponible en la edición Express.
fuente