Enumere todas las claves externas de una tabla, varias claves externas a la misma tabla

Excesivo

Utilizo el siguiente SQL para consultar las claves de una tabla determinada (claves primarias y externas) y sus descripciones. Estoy usando SQL Server 2005.

SELECT  c.name 'Column Name' ,
    t.name 'Data type' ,
    c.max_length 'Max Length' ,
    c.precision ,
    c.scale ,
    c.is_nullable ,
    ISNULL(i.is_primary_key, 0) 'Primary Key' ,
    CAST (( SELECT  COUNT(*)
            FROM    ( SELECT    cx.object_id
                      FROM      sys.foreign_key_columns fkc
                                INNER JOIN sys.columns cx ON fkc.parent_column_id = cx.column_id
                                                          AND fkc.parent_object_id = cx.object_id
                                INNER JOIN sys.columns cref ON fkc.referenced_column_id = cref.column_id
                                                          AND fkc.referenced_object_id = cref.object_id
                      WHERE     cx.column_id = c.column_id
                                AND fkc.parent_object_id = OBJECT_ID('[dbo].Cards')
                    ) xxx
          ) AS BIT) AS 'Foreign Key' ,
    ( SELECT    OBJECT_SCHEMA_NAME(fkc.referenced_object_id)
      FROM      sys.foreign_key_columns fkc
                INNER JOIN sys.columns cy ON fkc.parent_column_id = cy.column_id
                                             AND fkc.parent_object_id = cy.object_id
                INNER JOIN sys.columns cref ON fkc.referenced_column_id = cref.column_id
                                               AND fkc.referenced_object_id = cref.object_id
      WHERE     cy.column_id = c.column_id
                AND fkc.parent_object_id = OBJECT_ID('[dbo].Cards')
    ) 'Schema Name' ,
    ( SELECT    OBJECT_NAME(referenced_object_id)
      FROM      sys.foreign_key_columns fkc
                INNER JOIN sys.columns cy ON fkc.parent_column_id = cy.column_id
                                             AND fkc.parent_object_id = cy.object_id
                INNER JOIN sys.columns cref ON fkc.referenced_column_id = cref.column_id
                                               AND fkc.referenced_object_id = cref.object_id
      WHERE     cy.column_id = c.column_id
                AND fkc.parent_object_id = OBJECT_ID('[dbo].Cards')
    ) 'Referenced table' ,
    ( SELECT    cref.name
      FROM      sys.foreign_key_columns fkc
                INNER JOIN sys.columns cy ON fkc.parent_column_id = cy.column_id
                                             AND fkc.parent_object_id = cy.object_id
                INNER JOIN sys.columns cref ON fkc.referenced_column_id = cref.column_id
                                               AND fkc.referenced_object_id = cref.object_id
      WHERE     cy.column_id = c.column_id
                AND fkc.parent_object_id = OBJECT_ID('[dbo].Cards')
    ) 'Referenced column name' ,
    ( SELECT    sep.value [Description]
      FROM      sys.extended_properties sep
      WHERE     OBJECT_ID('[dbo].Cards') = sep.major_id
                AND c.column_id = sep.minor_id
    ) Description FROM sys.columns c
    INNER JOIN sys.types t ON c.user_type_id = t.user_type_id
    LEFT OUTER JOIN sys.index_columns ic ON ic.object_id = c.object_id
                                            AND ic.column_id = c.column_id
    LEFT OUTER JOIN sys.indexes i ON ic.object_id = i.object_id
                                     AND ic.index_id = i.index_id WHERE   c.object_id = OBJECT_ID('[dbo].Cards');

La consulta funciona muy bien para todas las tablas, a menos que la tabla tenga dos claves externas para la misma tabla.

El error que recibo es

"Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression."

¿Qué estoy haciendo mal?

sepupic

No verifiqué su segunda consulta, pero el problema sigue ahí: la subconsulta que devuelve más de 1 valor es esta.

( SELECT    sep.value [Description]
  FROM      sys.extended_properties sep
  WHERE     OBJECT_ID('person.stateProvince') = sep.major_id
            AND c.column_id = sep.minor_id                 
) Description 

debe agregar una condición adicional en la cláusula where:

and class = 1 -- OBJECT_OR_COLUMN

su consulta no considera más de 1 índices para la tabla, uniéndose en c.column_id = sep.minor_id, usted obtiene más filas porque cuando la clase es 7 (índice) minor_id es la identificación del índice, no la identificación de la columna

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Seleccionar todas las referencias de claves externas en la tabla

MYSQL: seleccione por dos claves externas de la misma tabla

Cómo construir una estructura de tabla (Mi) SQL para una tabla que contiene varias claves externas que apuntan a la misma tabla

¿Cómo veo todas las claves externas de una tabla o columna?

Postgres: SQL para enumerar las claves externas de la tabla

Postgres: SQL para enumerar las claves externas de la tabla

Sequelize Alter siempre establece todas las claves externas de la tabla de datos en nulo

JOOQ recupera la tabla de claves externas

Error en la tabla de claves externas

Eliminar una fila de la tabla dinámica sin conocer una de las claves externas

SQLAlchemy: varias claves externas que apuntan a la misma tabla, mismo atributo

Tener varias claves externas en la misma tabla con diferentes al eliminar provoca un error

Dos claves externas que apuntan a la misma tabla / modelo

2 claves externas que hacen referencia a la misma tabla

Rails múltiples claves externas en la misma tabla

Definición de varias claves externas para la misma tabla en el código de Entity Framework primero

Tabla con dos claves externas que apuntan a la misma columna de otra tabla

Agregue varias claves externas a la tabla existente en Oracle

¿Cuáles son las ventajas / desventajas de tener todas las claves externas en la tabla de hechos?

SQL JOIN y desea una vista: 2 claves externas que hacen referencia a la misma tabla

Agregar a una tabla con claves externas

¿Podemos hacer múltiples claves externas de diferentes enlaces de tabla con la misma clave primaria?

Entity Framework Code First: dos claves externas de la misma tabla

unirse en dos claves externas de la misma tabla en SQL

consultas de mysql en dos claves externas que hacen referencia a la misma tabla

Obtener datos de la tabla de claves externas

El asignador no puede ubicar las claves externas en la tabla secundaria (relación de muchos a muchos)

Seleccione todo de la tabla donde las filas tienen la identificación más alta de todas las que tienen las mismas claves externas

La creación de claves externas en una tabla falla en Oracle y 2 esquemas

TOP Lista

  1. 1

    ¿Cómo ocultar la aplicación web de los robots de búsqueda? (ASP.NET)

  2. 2

    uitableview delete button image in iOS

  3. 3

    Pandas의 CSV 파일을 Pandas 데이터 프레임으로 가져 오기

  4. 4

    El nombre 'HttpContext' no existe en el contexto actual en Razor

  5. 5

    Verilog : 입력 신호를 한 클럭 주기로 지연시키는 방법은 무엇입니까?

  6. 6

    WPF pleine largeur DataGridColumn sur la largeur de DataGrid

  7. 7

    Manera correcta de agregar referencias al proyecto C # de modo que sean compatibles con el control de versiones

  8. 8

    Python, Pandas para hacer coincidir el marco de datos e indicar los hallazgos de una lista

  9. 9

    No se puede trazar la barra doble, trazar la barra usando pyplot para ndarray

  10. 10

    2D 배열에 대한 Numpy 요소 별 평균 계산

  11. 11

    ¿Cómo formatear el valor mínimo y máximo de android-range-seek-bar?

  12. 12

    Problème avec le dessin d'un élément Qml avec des appels OpenGL bruts

  13. 13

    Enlace débil de iOS Framework: error de símbolos indefinidos

  14. 14

    desbordamiento: oculto no funciona al hacer zoom en un iframe de YouTube usando transformar

  15. 15

    Swift / Firebase : Facebook 사용자가 계정을 만들 때 Firebase 데이터베이스에 제대로 저장하려면 어떻게해야합니까?

  16. 16

    multiplica dos números negativos en c ++

  17. 17

    Pandas: suma filas de DataFrame para columnas dadas

  18. 18

    matplotlib로 그래프를 그리는 동안 커서 위치에서 날짜 / 시간을 볼 수 없습니다. "DateFormatter에서 x = 0 값을 찾았습니다"라는 오류가 발생합니다.

  19. 19

    UIButton textLabel with different fonts

  20. 20

    Error de la base de datos de Android Firebase: Permiso denegado al depurar en un teléfono

  21. 21

    Room compile problem - column references a foreign key but it is not part of an index

CalienteEtiquetas

Archivo