0

Определение первичного ключа таблицы с использованием T-SQL

15

Я пытаюсь определить первичный ключ таблицы с использованием TSQL (подходит как хранимая процедура, так и системная таблица). Существует ли такой механизм в SQL Server (2005 или 2008)?

5 ответ(ов)

0

Вот пример запроса, который поможет вам начать:

SELECT 
    *
FROM 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
    JOIN 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu 
        ON tc.CONSTRAINT_NAME = ccu.Constraint_name
WHERE 
    tc.TABLE_NAME = 'TableName' AND 
    tc.CONSTRAINT_TYPE = 'Primary Key'

Этот запрос извлекает информацию о первичных ключах для таблицы с указанным именем. Он соединяет две схемы: TABLE_CONSTRAINTS, чтобы получить типы ограничений, и CONSTRAINT_COLUMN_USAGE, чтобы узнать, какие столбцы участвуют в этих ограничениях. Не забудьте заменить 'TableName' на имя вашей таблицы.

0

Использование системы хранимых процедур SQL Server может помочь получить информацию о первичных ключах для заданной таблицы. Вы можете использовать следующий запрос:

EXEC sp_pkeys 'TableName'

В этом запросе нужно заменить 'TableName' на имя вашей таблицы. Процедура вернет набор данных, содержащий информацию о первичных ключах, включая имя таблицы, имя столбца ключа и порядок столбцов, если ключ состоит из нескольких столбцов.

Обратите внимание, что данный метод работает только в SQL Server, и если вы используете другую СУБД, вам может понадобиться другой подход.

0

Вот решение, основанное на системных таблицах из SQL Server 2005 (на 99% уверенно, что будет работать и в 2008). Этот запрос перечисляет все первичные ключи для всех таблиц, определенных пользователем, с указанием всех колонок и некоторой дополнительной информацией, которую можно удалить. Вы можете добавить параметры, чтобы выбрать конкретную таблицу.

SELECT
   schema_name(ta.schema_id) AS SchemaName,
   ta.name AS TableName,
   ind.name AS IndexName,
   indcol.key_ordinal AS Ordinal,
   col.name AS ColumnName,
   ind.type_desc AS IndexType,
   ind.fill_factor AS FillFactor
FROM sys.tables ta
INNER JOIN sys.indexes ind
   ON ind.object_id = ta.object_id
INNER JOIN sys.index_columns indcol
   ON indcol.object_id = ta.object_id
   AND indcol.index_id = ind.index_id
INNER JOIN sys.columns col
   ON col.object_id = ta.object_id
   AND col.column_id = indcol.column_id
WHERE ind.is_primary_key = 1
ORDER BY
   ta.name,
   indcol.key_ordinal;

Этот запрос вернет название схемы и таблицы, имя индекса, порядковый номер колонки, имя колонки, тип индекса и фактор заполнения для всех первичных ключей. Чтобы отфильтровать результаты по конкретной таблице, вы можете добавить условие в WHERE для фильтрации по ta.name. Например:

WHERE ind.is_primary_key = 1 AND ta.name = 'ИмяВашейТаблицы'

Таким образом, вы сможете получить информацию только по интересующей вас таблице.

0

Ваш SQL-запрос предназначен для извлечения имен столбцов и имен ограничений первичного ключа из определенной таблицы в базе данных. Вот перевод вашего запроса с объяснениями на русском:

SELECT ccu.COLUMN_NAME, ccu.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc
    INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS ccu
        ON tc.CONSTRAINT_NAME = ccu.CONSTRAINT_NAME
WHERE tc.TABLE_CATALOG = 'Your_Catalog'    -- замените на ваш каталог
    AND tc.TABLE_SCHEMA = 'dbo'            -- замените на вашу схему
    AND tc.TABLE_NAME = 'Your_Table'       -- замените на имя вашей таблицы
    AND tc.CONSTRAINT_TYPE = 'PRIMARY KEY'

Этот запрос выполняет следующие действия:

  1. Извлекает имена столбцов (COLUMN_NAME) и имена ограничений (CONSTRAINT_NAME), которые связаны с первичным ключом таблицы.
  2. Использует объединение (INNER JOIN) между INFORMATION_SCHEMA.TABLE_CONSTRAINTS и INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE, чтобы связать ограничения с их соответствующими столбцами.
  3. Ограничивает результаты по каталогу, схеме и названию таблицы, которые вы должны заменить на свои собственные значения.

Убедитесь, что вы подставили актуальные имена для ваших параметров: Your_Catalog, dbo (или другую схему) и Your_Table, чтобы запрос вернул нужные данные.

0

Чтобы выполнить запрос на получение первичных ключей для определенной таблицы в SQL Server, вы можете использовать следующую команду:

EXEC [sys].[sp_primary_keys_rowset] @table_name = 'TableName';

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

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь