Cet article présente onze approches différentes pour récupérer les informations de clé étrangère dans SQL Server. Certains d'entre eux seront plus utiles que d'autres, selon la situation.
Certaines de ces méthodes peuvent être modifiées pour renvoyer des informations supplémentaires. Par exemple, vous pouvez effectuer des jointures sur différentes vues système pour renvoyer davantage de données.
Exemple 1 – La procédure stockée système sp_fkeys
Les sp_fkeys
La procédure stockée système renvoie des informations de clé étrangère logique pour l'environnement actuel. Il affiche les relations de clé étrangère, y compris les clés étrangères désactivées.
Cette procédure stockée est idéale lorsque vous avez besoin d'informations de clé étrangère pour une table spécifique. Vous transmettez simplement le nom de la table de clé primaire ou étrangère à la procédure, et elle renverra les informations pertinentes.
Exemple :
EXEC sp_fkeys @fktable_name = Albums;
Résultat (en utilisant la sortie verticale) :
-[ RECORD 1 ]------------------------- PKTABLE_QUALIFIER | Music PKTABLE_OWNER | dbo PKTABLE_NAME | Artists PKCOLUMN_NAME | ArtistId FKTABLE_QUALIFIER | Music FKTABLE_OWNER | dbo FKTABLE_NAME | Albums FKCOLUMN_NAME | ArtistId KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Albums_Artists PK_NAME | PK__Artists__25706B50FCD918B1 DEFERRABILITY | 7 -[ RECORD 2 ]------------------------- PKTABLE_QUALIFIER | Music PKTABLE_OWNER | dbo PKTABLE_NAME | Genres PKCOLUMN_NAME | GenreId FKTABLE_QUALIFIER | Music FKTABLE_OWNER | dbo FKTABLE_NAME | Albums FKCOLUMN_NAME | GenreId KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Albums_Genres PK_NAME | PK__Genres__0385057E88BB96F8 DEFERRABILITY | 7
Une autre façon d'utiliser cette vue consiste à fournir le nom de la table de clé primaire :
EXEC sp_fkeys @pktable_name = Artists;
Résultat (en utilisant la sortie verticale) :
-[ RECORD 1 ]------------------------- PKTABLE_QUALIFIER | Music PKTABLE_OWNER | dbo PKTABLE_NAME | Artists PKCOLUMN_NAME | ArtistId FKTABLE_QUALIFIER | Music FKTABLE_OWNER | dbo FKTABLE_NAME | Albums FKCOLUMN_NAME | ArtistId KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Albums_Artists PK_NAME | PK__Artists__25706B50FCD918B1 DEFERRABILITY | 7
Vous pouvez également utiliser d'autres arguments, tels que le propriétaire de la table et le qualificateur de table :
EXEC sp_fkeys @pktable_name = Artists, @pktable_owner = dbo, @pktable_qualifier = Music, @fktable_name = Albums, @fktable_owner = dbo, @fktable_qualifier = Music;
Exemple 2 – La vue système REFERENTIAL_CONSTRAINTS
Le INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
la vue système renvoie une ligne pour chaque FOREIGN KEY
contrainte dans la base de données courante.
Ceci est idéal pour renvoyer rapidement une liste de clés étrangères dans la base de données avec leur contrainte unique associée. Vous n'êtes pas limité à une seule table comme dans l'exemple précédent.
Voici un exemple :
SELECT CONSTRAINT_NAME, UNIQUE_CONSTRAINT_NAME FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS;
Résultat :
+-------------------+-------------------------------+ | CONSTRAINT_NAME | UNIQUE_CONSTRAINT_NAME | |-------------------+-------------------------------| | FK_Albums_Artists | PK__Artists__25706B50FCD918B1 | | FK_Albums_Genres | PK__Genres__0385057E88BB96F8 | +-------------------+-------------------------------+
Ainsi, dans ce cas, nous pouvons voir chaque clé étrangère dans la base de données actuelle, ainsi que sa clé primaire associée.
Il s'avère que cette base de données n'a que deux clés étrangères et ce sont les mêmes que celles que nous avons vues dans l'exemple précédent.
Voici un exemple qui renvoie toutes les données pour les FK_Albums_Artists clé étrangère :
SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS WHERE CONSTRAINT_NAME = 'FK_Albums_Artists';
Résultat :
CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Artists UNIQUE_CONSTRAINT_CATALOG | Music UNIQUE_CONSTRAINT_SCHEMA | dbo UNIQUE_CONSTRAINT_NAME | PK__Artists__25706B50FCD918B1 MATCH_OPTION | SIMPLE UPDATE_RULE | NO ACTION DELETE_RULE | NO ACTION
Vous remarquerez que cette méthode ne fournit pas les détails des tables de clés primaires et étrangères que vous obtenez avec la méthode précédente, vous devrez donc effectuer des jointures avec d'autres vues si vous avez besoin de ces informations (ou utilisez l'une des méthodes ci-dessous).
Exemple 3 – La vue système KEY_COLUMN_USAGE
Le INFORMATION_SCHEMA.KEY_COLUMN_USAGE
La vue système renvoie une ligne pour chaque colonne contrainte en tant que clé dans la base de données actuelle.
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE;
Résultat :
+--------------+---------------+-------------------------------+ | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | |--------------+---------------+-------------------------------| | Albums | ArtistId | FK_Albums_Artists | | Albums | GenreId | FK_Albums_Genres | | Albums | AlbumId | PK__Albums__97B4BE379FC780BD | | Artists | ArtistId | PK__Artists__25706B50FCD918B1 | | Genres | GenreId | PK__Genres__0385057E88BB96F8 | +--------------+---------------+-------------------------------+
Nous pouvons voir que cela renvoie toutes les contraintes, y compris les clés primaires.
Nous pouvons également ajouter un WHERE
clause pour limiter les résultats à une table spécifique.
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'Albums';
Résultat :
+--------------+---------------+------------------------------+ | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | |--------------+---------------+------------------------------| | Albums | ArtistId | FK_Albums_Artists | | Albums | GenreId | FK_Albums_Genres | | Albums | AlbumId | PK__Albums__97B4BE379FC780BD | +--------------+---------------+------------------------------+
Dans ces exemples, j'ai limité les résultats aux seules colonnes de la vue qui m'intéressent, mais vous pouvez également utiliser l'astérisque (*
) caractère générique pour renvoyer toutes les colonnes.
SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'Albums';
Résultat (en utilisant la sortie verticale) :
-[ RECORD 1 ]------------------------- CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Artists TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums COLUMN_NAME | ArtistId ORDINAL_POSITION | 1 -[ RECORD 2 ]------------------------- CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Genres TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums COLUMN_NAME | GenreId ORDINAL_POSITION | 1 -[ RECORD 3 ]------------------------- CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | PK__Albums__97B4BE379FC780BD TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums COLUMN_NAME | AlbumId ORDINAL_POSITION | 1
Exemple 4 - La vue système CONSTRAINT_COLUMN_USAGE
Ceci est similaire à l'exemple précédent. Le INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
La vue système renvoie une ligne pour chaque colonne de la base de données actuelle pour laquelle une contrainte est définie sur la colonne.
Comme avec INFORMATION_SCHEMA.KEY_COLUMN_USAGE
vous obtiendrez également les clés primaires renvoyées avec cette vue. Cependant, INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
ne se limite pas aux contraintes clés.
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE;
Résultat :
+--------------+---------------+-------------------------------+ | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | |--------------+---------------+-------------------------------| | Albums | ArtistId | FK_Albums_Artists | | Albums | GenreId | FK_Albums_Genres | | Albums | AlbumId | PK__Albums__97B4BE379FC780BD | | Artists | ArtistId | PK__Artists__25706B50FCD918B1 | | Genres | GenreId | PK__Genres__0385057E88BB96F8 | +--------------+---------------+-------------------------------+
Vous pouvez utiliser un WHERE
clause pour renvoyer uniquement une table ou une colonne spécifique :
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE COLUMN_NAME = 'ArtistId';
Résultat :
+--------------+---------------+-------------------------------+ | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | |--------------+---------------+-------------------------------| | Albums | ArtistId | FK_Albums_Artists | | Artists | ArtistId | PK__Artists__25706B50FCD918B1 | +--------------+---------------+-------------------------------+
Dans ce cas, j'ai spécifié un nom de colonne, il a donc renvoyé toutes les contraintes sur les colonnes portant ce nom. Il s'avère que la base de données utilise le même nom de colonne dans deux tables différentes. L'un a une contrainte de clé étrangère, l'autre une clé primaire. Par conséquent, les deux lignes sont renvoyées.
Encore une fois, vous pouvez utiliser l'astérisque (*
) caractère générique pour renvoyer toutes les colonnes.
Voici un exemple où je renvoie toutes les données d'une table spécifique :
SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE TABLE_NAME = 'Albums';
Résultat (en utilisant la sortie verticale) :
-[ RECORD 1 ]------------------------- TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums COLUMN_NAME | ArtistId CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Artists -[ RECORD 2 ]------------------------- TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums COLUMN_NAME | GenreId CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Genres -[ RECORD 3 ]------------------------- TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums COLUMN_NAME | AlbumId CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | PK__Albums__97B4BE379FC780BD
Exemple 5 - La vue système CONSTRAINT_TABLE_USAGE
Le INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE
la vue système renvoie une ligne pour chaque table de la base de données actuelle pour laquelle une contrainte est définie sur la table.
SELECT TABLE_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE;
Résultat :
+--------------+-------------------------------+ | TABLE_NAME | CONSTRAINT_NAME | |--------------+-------------------------------| | Artists | PK__Artists__25706B50FCD918B1 | | Genres | PK__Genres__0385057E88BB96F8 | | Albums | PK__Albums__97B4BE379FC780BD | | Albums | FK_Albums_Artists | | Albums | FK_Albums_Genres | +--------------+-------------------------------+
Cette vue ne renvoie pas le ou les noms de colonne sur lesquels les contraintes sont utilisées, elle peut donc ne pas vous être aussi utile, selon vos besoins.
Voici un exemple qui montre toutes les données renvoyées par cette vue pour les Albums tableau :
SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE WHERE TABLE_NAME = 'Albums';
Résultat :
-[ RECORD 1 ]------------------------- TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | PK__Albums__97B4BE379FC780BD -[ RECORD 2 ]------------------------- TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Artists -[ RECORD 3 ]------------------------- TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Genres
Exemple 6 – La vue système TABLE_CONSTRAINTS
Le INFORMATION_SCHEMA.TABLE_CONSTRAINTS
la vue système renvoie une ligne pour chaque contrainte de table dans la base de données actuelle.
SELECT TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPE FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Résultat :
+--------------+-------------------------------+-------------------+ | TABLE_NAME | CONSTRAINT_NAME | CONSTRAINT_TYPE | |--------------+-------------------------------+-------------------| | Artists | PK__Artists__25706B50FCD918B1 | PRIMARY KEY | | Genres | PK__Genres__0385057E88BB96F8 | PRIMARY KEY | | Albums | PK__Albums__97B4BE379FC780BD | PRIMARY KEY | | Albums | FK_Albums_Artists | FOREIGN KEY | | Albums | FK_Albums_Genres | FOREIGN KEY | +--------------+-------------------------------+-------------------+
Cette vue ne fournit pas le nom de la colonne, mais elle fournit le type de contrainte. Par conséquent, vous pouvez limiter les résultats aux clés étrangères :
SELECT TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPE FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'FOREIGN KEY';
Résultat :
+--------------+-------------------+-------------------+ | TABLE_NAME | CONSTRAINT_NAME | CONSTRAINT_TYPE | |--------------+-------------------+-------------------| | Albums | FK_Albums_Artists | FOREIGN KEY | | Albums | FK_Albums_Genres | FOREIGN KEY | +--------------+-------------------+-------------------+
Voici un exemple qui utilise un caractère générique (*
) pour renvoyer toutes les données des contraintes de clé étrangère appliquées aux
Albums
tableau :
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'Albums' AND CONSTRAINT_TYPE = 'FOREIGN KEY';
Résultat :
-[ RECORD 1 ]------------------------- CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Artists TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums CONSTRAINT_TYPE | FOREIGN KEY IS_DEFERRABLE | NO INITIALLY_DEFERRED | NO -[ RECORD 2 ]------------------------- CONSTRAINT_CATALOG | Music CONSTRAINT_SCHEMA | dbo CONSTRAINT_NAME | FK_Albums_Genres TABLE_CATALOG | Music TABLE_SCHEMA | dbo TABLE_NAME | Albums CONSTRAINT_TYPE | FOREIGN KEY IS_DEFERRABLE | NO INITIALLY_DEFERRED | NO
Exemple 7 - La vue système sys.foreign_keys
Les sys.foreign_keys
la vue système contient une ligne par objet qui est une FOREIGN KEY
contrainte, avec sys.object.type = F
("F" est pour "clé étrangère").
Exemple :
SELECT name AS 'Constraint', OBJECT_NAME(parent_object_id) AS 'Table', OBJECT_NAME(referenced_object_id) AS 'Referenced Column' FROM sys.foreign_keys;
Résultat :
+-------------------+---------+---------------------+ | Constraint | Table | Referenced Column | |-------------------+---------+---------------------| | FK_Albums_Artists | Albums | Artists | | FK_Albums_Genres | Albums | Genres | +-------------------+---------+---------------------+
Le voici lors du retour de toutes les données pour les FK_Albums_Artists
clé étrangère :
SELECT * FROM sys.foreign_keys WHERE name = 'FK_Albums_Artists';
Résultat :
name | FK_Albums_Artists object_id | 981578535 principal_id | NULL schema_id | 1 parent_object_id | 949578421 type | F type_desc | FOREIGN_KEY_CONSTRAINT create_date | 2019-05-02 12:56:06.380 modify_date | 2019-05-02 12:56:06.380 is_ms_shipped | 0 is_published | 0 is_schema_published | 0 referenced_object_id | 885578193 key_index_id | 1 is_disabled | 0 is_not_for_replication | 0 is_not_trusted | 0 delete_referential_action | 0 delete_referential_action_desc | NO_ACTION update_referential_action | 0 update_referential_action_desc | NO_ACTION is_system_named | 0
Exemple 8 – La vue système sys.foreign_key_columns
Les sys.foreign_key_columns
la vue système contient une ligne pour chaque colonne, ou ensemble de colonnes, qui comprend une clé étrangère.
Exemple :
SELECT OBJECT_NAME(constraint_object_id) AS 'Foreign Key', OBJECT_NAME(parent_object_id) AS 'Table', OBJECT_NAME(referenced_object_id) AS 'Referenced Table' FROM sys.foreign_key_columns;
Résultat :
+--------------------+---------+--------------------+ | Foreign Key | Table | Referenced Table | |--------------------+---------+--------------------| | FK_Albums_Artists | Albums | Artists | | FK_Albums_Genres | Albums | Genres | | FK_Artists_Country | Artists | Country | +--------------------+---------+--------------------+
Et le voici lors du retour de toutes les données pour les FK_Albums_Artists
clé étrangère :
SELECT * FROM sys.foreign_key_columns WHERE OBJECT_NAME(constraint_object_id) = 'FK_Albums_Artists';
Résultat :
constraint_object_id | 981578535 constraint_column_id | 1 parent_object_id | 949578421 parent_column_id | 4 referenced_object_id | 885578193 referenced_column_id | 1
Exemple 9 - La vue système sys.objects
Les sys.objects
La vue système contient une ligne pour chaque objet défini par l'utilisateur et étendu au schéma qui est créé dans une base de données. Il inclut donc des informations sur nos clés étrangères.
Exemple :
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name FROM sys.objects WHERE type = 'F';
Résultat :
+---------+-------------------+ | Table | name | |---------+-------------------| | Albums | FK_Albums_Artists | | Albums | FK_Albums_Genres | +---------+-------------------+
Dans cet exemple, j'ai limité les résultats aux clés étrangères (type F
).
Voici un exemple qui renvoie toutes les données pour les FK_Albums_Artists clé étrangère :
SELECT * FROM sys.objects WHERE name = 'FK_Albums_Artists';
Résultat (en utilisant la sortie verticale) :
-[ RECORD 1 ]------------------------- name | FK_Albums_Artists object_id | 981578535 principal_id | NULL schema_id | 1 parent_object_id | 949578421 type | F type_desc | FOREIGN_KEY_CONSTRAINT create_date | 2019-05-02 12:56:06.380 modify_date | 2019-05-02 12:56:06.380 is_ms_shipped | 0 is_published | 0 is_schema_published | 0
Exemple 10 – La procédure stockée système sp_helpconstraint
La sp_helpconstraint
procédure stockée système renvoie une liste de tous les types de contraintes, leur nom défini par l'utilisateur ou fourni par le système, les colonnes sur lesquelles ils ont été définis et l'expression qui définit la contrainte (pour DEFAULT
et CHECK
contraintes uniquement).
Vous pouvez donc l'utiliser pour renvoyer des informations sur les clés étrangères de votre base de données.
Exemple :
EXEC sp_helpconstraint Albums;
Résultat :
+---------------+ | Object Name | |---------------| | Albums | +---------------+ -[ RECORD 1 ]------------------------- constraint_type | FOREIGN KEY constraint_name | FK_Albums_Artists delete_action | No Action update_action | No Action status_enabled | Enabled status_for_replication | Is_For_Replication constraint_keys | ArtistId -[ RECORD 2 ]------------------------- constraint_type | constraint_name | delete_action | update_action | status_enabled | status_for_replication | constraint_keys | REFERENCES Music.dbo.Artists (ArtistId) -[ RECORD 3 ]------------------------- constraint_type | FOREIGN KEY constraint_name | FK_Albums_Genres delete_action | No Action update_action | No Action status_enabled | Enabled status_for_replication | Is_For_Replication constraint_keys | GenreId -[ RECORD 4 ]------------------------- constraint_type | constraint_name | delete_action | update_action | status_enabled | status_for_replication | constraint_keys | REFERENCES Music.dbo.Genres (GenreId) -[ RECORD 5 ]------------------------- constraint_type | PRIMARY KEY (clustered) constraint_name | PK__Albums__97B4BE379FC780BD delete_action | (n/a) update_action | (n/a) status_enabled | (n/a) status_for_replication | (n/a) constraint_keys | AlbumId
Exemple 11 – La procédure stockée du système sp_help
Le sp_help
la procédure stockée du système rapporte des informations sur un objet de base de données (tout objet répertorié dans le sys.sysobjects
vue de compatibilité), un type de données défini par l'utilisateur ou un type de données. Cela inclut des informations sur les clés étrangères.
Lorsque vous l'exécutez sans aucun argument, il fournit des informations sur les informations récapitulatives des objets de tous les types qui existent dans la base de données actuelle (c'est-à-dire un lot d'informations).
Cependant, vous pouvez fournir le nom d'une table, et il renverra des informations sur cette table. Encore une fois, vous obtiendrez beaucoup d'informations, mais parmi elles se trouveront des informations sur les clés étrangères.
Exemple :
EXEC sp_help Albums;
Résultat :
+--------+---------+------------+-------------------------+ | Name | Owner | Type | Created_datetime | |--------+---------+------------+-------------------------| | Albums | dbo | user table | 2019-05-02 12:56:06.370 | +--------+---------+------------+-------------------------+ -[ RECORD 1 ]------------------------- Column_name | AlbumId Type | int Computed | no Length | 4 Prec | 10 Scale | 0 Nullable | no TrimTrailingBlanks | (n/a) FixedLenNullInSource | (n/a) Collation | NULL -[ RECORD 2 ]------------------------- Column_name | AlbumName Type | nvarchar Computed | no Length | 510 Prec | Scale | Nullable | no TrimTrailingBlanks | (n/a) FixedLenNullInSource | (n/a) Collation | SQL_Latin1_General_CP1_CI_AS -[ RECORD 3 ]------------------------- Column_name | ReleaseDate Type | date Computed | no Length | 3 Prec | 10 Scale | 0 Nullable | no TrimTrailingBlanks | (n/a) FixedLenNullInSource | (n/a) Collation | NULL -[ RECORD 4 ]------------------------- Column_name | ArtistId Type | int Computed | no Length | 4 Prec | 10 Scale | 0 Nullable | no TrimTrailingBlanks | (n/a) FixedLenNullInSource | (n/a) Collation | NULL -[ RECORD 5 ]------------------------- Column_name | GenreId Type | int Computed | no Length | 4 Prec | 10 Scale | 0 Nullable | no TrimTrailingBlanks | (n/a) FixedLenNullInSource | (n/a) Collation | NULL +------------+--------+-------------+-----------------------+ | Identity | Seed | Increment | Not For Replication | |------------+--------+-------------+-----------------------| | AlbumId | 1 | 1 | 0 | +------------+--------+-------------+-----------------------+ +-------------------------------+ | RowGuidCol | |-------------------------------| | No rowguidcol column defined. | +-------------------------------+ +-----------------------------+ | Data_located_on_filegroup | |-----------------------------| | PRIMARY | +-----------------------------+ +------------------------------+---------------------------------------------------+--------------+ | index_name | index_description | index_keys | |------------------------------+---------------------------------------------------+--------------| | PK__Albums__97B4BE379FC780BD | clustered, unique, primary key located on PRIMARY | AlbumId | +------------------------------+---------------------------------------------------+--------------+ -[ RECORD 1 ]------------------------- constraint_type | FOREIGN KEY constraint_name | FK_Albums_Artists delete_action | No Action update_action | No Action status_enabled | Enabled status_for_replication | Is_For_Replication constraint_keys | ArtistId -[ RECORD 2 ]------------------------- constraint_type | constraint_name | delete_action | update_action | status_enabled | status_for_replication | constraint_keys | REFERENCES Music.dbo.Artists (ArtistId) -[ RECORD 3 ]------------------------- constraint_type | FOREIGN KEY constraint_name | FK_Albums_Genres delete_action | No Action update_action | No Action status_enabled | Enabled status_for_replication | Is_For_Replication constraint_keys | GenreId -[ RECORD 4 ]------------------------- constraint_type | constraint_name | delete_action | update_action | status_enabled | status_for_replication | constraint_keys | REFERENCES Music.dbo.Genres (GenreId) -[ RECORD 5 ]------------------------- constraint_type | PRIMARY KEY (clustered) constraint_name | PK__Albums__97B4BE379FC780BD delete_action | (n/a) update_action | (n/a) status_enabled | (n/a) status_for_replication | (n/a) constraint_keys | AlbumId