Как я определяю, находится ли столбец в первичном ключе его таблицы? (SQL Server)

Используйте фабрику только тогда, когда вам необходим дополнительный контроль с созданием объекта, что невозможно сделать с конструкторами.

У фабрик есть возможность кэширования, например.

Другой способ использования заводов - это сценарий, в котором вы не знаете тип, который хотите построить. Часто вы видите этот тип использования в сценариях фабрики плагинов, где каждый плагин должен получить базовый класс или реализовать какой-то интерфейс. Завод создает экземпляры классов, которые производятся из базового класса или реализуют интерфейс.

16
задан Forgotten Semicolon 24 October 2008 в 15:53
поделиться

2 ответа

Вот один путь (замените 'keycol' именем столбца, которое Вы ищете):

SELECT  K.TABLE_NAME ,
    K.COLUMN_NAME ,
    K.CONSTRAINT_NAME
FROM    INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C
        JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K ON C.TABLE_NAME = K.TABLE_NAME
                                                         AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG
                                                         AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA
                                                         AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME
WHERE   C.CONSTRAINT_TYPE = 'PRIMARY KEY'
        AND K.COLUMN_NAME = 'keycol';
36
ответ дан 30 November 2019 в 16:01
поделиться

Точно так же следующее даст Вам информацию обо всех таблицах и их ключах вместо информации об определенных столбцах. Таким образом, Вы удостоверяетесь, что имеете все столбцы интереса и знаете то, в чем они участвуют. Для наблюдения всех ключей (основной, внешний, уникальный), прокомментируйте оператор Where.

SELECT K.TABLE_NAME, C.CONSTRAINT_TYPE, K.COLUMN_NAME, K.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K
ON C.TABLE_NAME = K.TABLE_NAME
AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG
AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA
AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME
WHERE C.CONSTRAINT_TYPE = 'PRIMARY KEY'
ORDER BY K.TABLE_NAME, C.CONSTRAINT_TYPE, K.CONSTRAINT_NAME
6
ответ дан 30 November 2019 в 16:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: