SQL Serverでは、sp_primarykeys
を使用できます 指定されたリンクサーバーから主キー列を返すシステムストアドプロシージャ。指定されたリモートテーブルに対して、キー列ごとに1行を返します。
このストアドプロシージャを実行する最も簡単な方法は、リンクサーバーの名前を渡すことです。これを行うと、指定されたリンクサーバー上のデフォルトデータベースからすべての主キーが返されます。
別のデータベースや特定のテーブルスキーマを指定するオプションもあります。
構文
構文は次のようになります:
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 | +-------------+---------------+--------------+---------------+-----------+-----------+
この場合、4つの主キー列があります(これらはCOLUMN_NAME
の下にリストされています )。 PK_NAME
に気付くでしょう 列はNULL
です 。この列は主キー識別子用です。 Microsoftは、データソースに適用できない場合、これはNULLを返すと述べています。
KEY_SEQ
columnは、複数列の主キーの列のシーケンス番号です。この場合、複数列の主キーがなかったため、値は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 | +----------------------+---------------+---------------+-------------------+-----------+-----------+