В SQL Server можете да използвате sp_primarykeys
системна съхранена процедура за връщане на колоните с първичен ключ от определен свързан сървър. Връща по един ред на ключова колона за посочената отдалечена таблица.
Най-простият начин да изпълните тази съхранена процедура е да предадете името на свързания сървър. Това ще върне всички първични ключове от базата данни по подразбиране на посочения свързан сървър.
Също така имате възможност да посочите различна база данни и/или конкретна схема на таблица.
Синтаксис
Синтаксисът е така:
sp_primarykeys [ @table_server = ] 'table_server' [ , [ @table_name = ] 'table_name' ] [ , [ @table_schema = ] 'table_schema' ] [ , [ @table_catalog = ] 'table_catalog' ]
@table_server
аргументът е единственият задължителен аргумент. Това е името на свързания сървър, от който искате информацията за първичния ключ.
Другите аргументи са незадължителни.
Пример 1 – Връщане на всички първични ключове в базата данни по подразбиране
Следният пример връща всички първични ключове от базата данни по подразбиране на свързания сървър, наречен Homer.
EXEC sp_primarykeys @table_server = 'Homer';
Може да се изпълнява и по следния начин:
EXEC sp_primarykeys 'Homer';
Резултат:
+-------------+---------------+--------------+---------------+-----------+-----------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | COLUMN_NAME | KEY_SEQ | PK_NAME | |-------------+---------------+--------------+---------------+-----------+-----------| | Music | dbo | Albums | AlbumId | 1 | NULL | | Music | dbo | Artists | ArtistId | 1 | NULL | | Music | dbo | Country | CountryId | 1 | NULL | | Music | dbo | Genres | GenreId | 1 | NULL | +-------------+---------------+--------------+---------------+-----------+-----------+
В този случай има четири колони с първичен ключ (те са изброени под COLUMN_NAME
). Ще забележите, че PK_NAME
колоната е NULL
. Тази колона е за идентификатора на първичния ключ. Microsoft заявява, че това връща NULL, ако не е приложимо към източника на данни.
KEY_SEQ
колоната е поредният номер на колоната в първичен ключ с много колони. В този случай нямаше първични ключове с много колони, така че стойността е 1
за всеки първичен ключ. Следващият пример връща някои резултати с многоколонни първични ключове.
Пример 2 – Посочете различна база данни
Следният пример указва, че WideWorldImportersDW
база данни трябва да се използва.
EXEC sp_primarykeys @table_server = 'Homer', @table_catalog = 'WideWorldImportersDW';
Резултат:
+----------------------+---------------+-------------------------+------------------------------+-----------+-----------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | COLUMN_NAME | KEY_SEQ | PK_NAME | |----------------------+---------------+-------------------------+------------------------------+-----------+-----------| | WideWorldImportersDW | Dimension | City | City Key | 1 | NULL | | WideWorldImportersDW | Dimension | Customer | Customer Key | 1 | NULL | | WideWorldImportersDW | Dimension | Date | Date | 1 | NULL | | WideWorldImportersDW | Dimension | Employee | Employee Key | 1 | NULL | | WideWorldImportersDW | Dimension | Payment Method | Payment Method Key | 1 | NULL | | WideWorldImportersDW | Dimension | Stock Item | Stock Item Key | 1 | NULL | | WideWorldImportersDW | Dimension | Supplier | Supplier Key | 1 | NULL | | WideWorldImportersDW | Dimension | Transaction Type | Transaction Type Key | 1 | NULL | | WideWorldImportersDW | Fact | Movement | Movement Key | 1 | NULL | | WideWorldImportersDW | Fact | Movement | Date Key | 2 | NULL | | WideWorldImportersDW | Fact | Order | Order Key | 1 | NULL | | WideWorldImportersDW | Fact | Order | Order Date Key | 2 | NULL | | WideWorldImportersDW | Fact | Purchase | Purchase Key | 1 | NULL | | WideWorldImportersDW | Fact | Purchase | Date Key | 2 | NULL | | WideWorldImportersDW | Fact | Sale | Sale Key | 1 | NULL | | WideWorldImportersDW | Fact | Sale | Invoice Date Key | 2 | NULL | | WideWorldImportersDW | Fact | Stock Holding | Stock Holding Key | 1 | NULL | | WideWorldImportersDW | Fact | Transaction | Transaction Key | 1 | NULL | | WideWorldImportersDW | Fact | Transaction | Date Key | 2 | NULL | | WideWorldImportersDW | Integration | City_Staging | City Staging Key | 1 | NULL | | WideWorldImportersDW | Integration | Customer_Staging | Customer Staging Key | 1 | NULL | | WideWorldImportersDW | Integration | Employee_Staging | Employee Staging Key | 1 | NULL | | WideWorldImportersDW | Integration | ETL Cutoff | Table Name | 1 | NULL | | WideWorldImportersDW | Integration | Lineage | Lineage Key | 1 | NULL | | WideWorldImportersDW | Integration | Movement_Staging | Movement Staging Key | 1 | NULL | | WideWorldImportersDW | Integration | Order_Staging | Order Staging Key | 1 | NULL | | WideWorldImportersDW | Integration | PaymentMethod_Staging | Payment Method Staging Key | 1 | NULL | | WideWorldImportersDW | Integration | Purchase_Staging | Purchase Staging Key | 1 | NULL | | WideWorldImportersDW | Integration | Sale_Staging | Sale Staging Key | 1 | NULL | | WideWorldImportersDW | Integration | StockHolding_Staging | Stock Holding Staging Key | 1 | NULL | | WideWorldImportersDW | Integration | StockItem_Staging | Stock Item Staging Key | 1 | NULL | | WideWorldImportersDW | Integration | Supplier_Staging | Supplier Staging Key | 1 | NULL | | WideWorldImportersDW | Integration | Transaction_Staging | Transaction Staging Key | 1 | NULL | | WideWorldImportersDW | Integration | TransactionType_Staging | Transaction Type Staging Key | 1 | NULL | +----------------------+---------------+-------------------------+------------------------------+-----------+-----------+
Пример 3 – Посочете схема на таблица
Следващият пример стеснява резултатите до конкретна схема на таблица.
EXEC sp_primarykeys @table_server = 'Homer', @table_schema = 'Fact', @table_catalog = 'WideWorldImportersDW';
Резултати:
+----------------------+---------------+---------------+-------------------+-----------+-----------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | COLUMN_NAME | KEY_SEQ | PK_NAME | |----------------------+---------------+---------------+-------------------+-----------+-----------| | WideWorldImportersDW | Fact | Movement | Movement Key | 1 | NULL | | WideWorldImportersDW | Fact | Movement | Date Key | 2 | NULL | | WideWorldImportersDW | Fact | Order | Order Key | 1 | NULL | | WideWorldImportersDW | Fact | Order | Order Date Key | 2 | NULL | | WideWorldImportersDW | Fact | Purchase | Purchase Key | 1 | NULL | | WideWorldImportersDW | Fact | Purchase | Date Key | 2 | NULL | | WideWorldImportersDW | Fact | Sale | Sale Key | 1 | NULL | | WideWorldImportersDW | Fact | Sale | Invoice Date Key | 2 | NULL | | WideWorldImportersDW | Fact | Stock Holding | Stock Holding Key | 1 | NULL | | WideWorldImportersDW | Fact | Transaction | Transaction Key | 1 | NULL | | WideWorldImportersDW | Fact | Transaction | Date Key | 2 | NULL | +----------------------+---------------+---------------+-------------------+-----------+-----------+