2015-07-10 3 views
3

С помощью этого запроса я получаю список всех ограничений базы данных моей базы данных CHECK, FOREIGN_KEY, PRIMARY_KEY и UNIQUE_KEY.Получить список ограничений SQL Server без избыточности

SELECT 
    o.object_id as ID, o.name AS Name, 
    OBJECT_NAME(o.parent_object_id) AS TableName, 
    o.type_desc AS TypeName, 
    cs.COLUMN_NAME as ColumnName 
FROM 
    sys.objects o 
LEFT JOIN 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cs ON o.name = cs.CONSTRAINT_NAME 
WHERE 
    o.type = 'C' or o.type = 'F' or o.type = 'PK' or o.type = 'UQ' 

Однако есть некоторые из них со многими «ColumnName», и я хочу это сделать.

Например:

'PK_ENTITE_SIGN_DOSSIER_ID_DOSSIER_ID_ENTITE_ID_GROUPE_SIGN_ID_PERSONNE_ID_SCHEMA' 

является PRIMARY_KEY на столе ENTITE_SIGN_DOSSIER и содержит ID_DOSSIER, ID_ENTITE, ID_GROUPE_SIGN, ID_PERSONNE и ID_SCHEMA (5 столбцов) и в этом случае мой запрос возврата 5 строк для этого ограничения.

Как можно связать имена этих столбцов с результатами запроса?

Большое спасибо за вашу помощь

+2

Простой поиск в вашей любимой поисковой системы на «StackOverflow значений конкатенации строк SQL Server», даст много примеров о том, как объединить имена столбцов. Первые два примера, которые я нашел, должны пролить свет на это: [1] (https://stackoverflow.com/questions/1874966/concatenate-row-values-t-sql) и [2] (https://stackoverflow.com/вопросы/5196371/SQL-запрос конкатенации-результаты, в-один-строка). –

ответ

3

Это стандартная xml и stuff функция трюк:

SELECT o.object_id AS ID , 
     o.name AS Name , 
     OBJECT_NAME(o.parent_object_id) AS TableName , 
     o.type_desc AS TypeName , 
     ca.ColumnName 
FROM sys.objects o 
     CROSS APPLY (SELECT STUFF((SELECT ', ' + cs.COLUMN_NAME 
             FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cs 
             WHERE o.name = cs.CONSTRAINT_NAME 
             FOR 
             XML PATH('') 
            ), 1, 2, '') AS ColumnName 
        ) ca 
WHERE o.type = 'C' 
     OR o.type = 'F' 
     OR o.type = 'PK' 
     OR o.type = 'UQ' 
ORDER BY ID 
Смежные вопросы