sql >> Database >  >> RDS >> Sqlserver

7 manieren om alle tabellen te retourneren met een primaire sleutel in SQL Server

Als u ooit merkt dat u alle tabellen met een primaire sleutel in SQL Server moet vinden, kan dit artikel u helpen.

Dit artikel biedt zeven manieren om alle tabellen in de huidige database met een primaire sleutel te retourneren.

Merk op dat de meeste van deze voorbeelden alleen de tabellen retourneren - niet de primaire sleutels zelf. Als u een lijst met primaire sleutels wilt, raadpleegt u 11 manieren om een ​​primaire sleutel in SQL Server te retourneren.

Optie 1 – OBJECTPROPERTY() met sys.tables

De eerste optie omvat het gebruik van de OBJECTPROPERTY() functie bij het opvragen van de sys.tables systeem bekijken. Deze functie accepteert een TableHasPrimaryKey argument. Als dit argument een waarde heeft van 1 , krijgen we alle tabellen die een primaire sleutel hebben (als het 0 is) dan krijgen we alle tabellen die geen primaire sleutel hebben).

SELECT SCHEMA_NAME(schema_id) AS [Schema], naam AS [Tabel]FROM sys.tablesWHERE OBJECTPROPERTY(object_id, 'TableHasPrimaryKey') =1ORDER BY [Schema], [Tabel];

Resultaat:

+----------+---------+| Schema | Tabel ||----------+---------|| dbo | Albums || dbo | Artiesten || dbo | Land || dbo | Genres |+----------+---------+

In dit voorbeeld heeft de huidige database vier tabellen met een primaire sleutel.

De overige voorbeelden zullen dezelfde database doorzoeken, dus de resultaten zullen hetzelfde zijn voor die zoekopdrachten.

Optie 2 – OBJECTPROPERTY() met INFORMATION_SCHEMA.TABLES

Dit voorbeeld gebruikt OBJECTPROPERTY() nogmaals, maar deze keer vraag ik de INFORMATION_SCHEMA.TABLES bekijken.

SELECT TABLE_SCHEMA, TABLE_NAMEFROM INFORMATION_SCHEMA.TABLESWHERE OBJECTPROPERTY(OBJECT_ID(CONCAT(TABLE_SCHEMA, '.', TABLE_NAME)),'TableHasPrimaryKey') =1 ANDTABLE_TYPE='BASISTABEL'ORDER BY TABLE_SCHEMA;TABLE_NAME_SCHEMA; 

Resultaat:

+----------------+--------------+| TABLE_SCHEMA | TABLE_NAME ||----------------+--------------|| dbo | Albums || dbo | Artiesten || dbo | Land || dbo | Genres |+----------------+--------------+

Optie 3 – OBJECTPROPERTY() met sys.objects

Nogmaals OBJECTPROPERTY() komt te hulp. Deze keer vraag ik de sys.objects systeemweergave.

SELECT SCHEMA_NAME(schema_id) AS [Schema], naam AS [Table]FROM sys.objects WHERE type ='U'AND OBJECTPROPERTY(OBJECT_ID(CONCAT(SCHEMA_NAME(schema_id), '.', name)), 'TableHasPrimaryKey ') =1ORDER BY [Schema], [Tabel]

Resultaat:

+----------+---------+| Schema | Tabel ||----------+---------|| dbo | Albums || dbo | Artiesten || dbo | Land || dbo | Genres |+----------+---------+

Optie 4 – INFORMATION_SCHEMA.TABLE_CONSTRAINTS

U kunt de INFORMATION_SCHEMA.TABLE_CONSTRAINTS . opvragen view om een ​​lijst met tabellen met primaire sleutels te krijgen. U moet de resultaten filteren op alleen die rijen met een CONSTRAINT_TYPE van PRIMARY KEY .

SELECT CONSTRAINT_SCHEMA, TABLE_NAMEFROM INFORMATION_SCHEMA.TABLE_CONSTRAINTSWHERE CONSTRAINT_TYPE ='PRIMAIRE SLEUTEL';

Resultaat:

+---------------------+--------------+| CONSTRRAINT_SCHEMA | TABLE_NAME ||---------------------+--------------|| dbo | Artiesten || dbo | Genres || dbo | Albums || dbo | Land |+---------------------+--------------+

Deze weergave retourneert ook de naam van de beperking, dus u kunt desgewenst ook die kolom opnemen:

SELECT CONSTRAINT_SCHEMA, TABLE_NAME, CONSTRAINT_NAMEFROM INFORMATION_SCHEMA.TABLE_CONSTRAINTSWHERE CONSTRAINT_TYPE ='PRIMAIRE SLEUTEL';

Resultaat:

+---------------------+--------------+--------- ----------------------+| CONSTRRAINT_SCHEMA | TABLE_NAME | CONSTRAINT_NAME ||---------------------+--------------+---------- ---------------------|| dbo | Artiesten | PK__Artiesten__25706B50FCD918B1 || dbo | Genres | PK__Genres__0385057E88BB96F8 || dbo | Albums | PK__Albums__97B4BE379FC780BD || dbo | Land | PK__Land__10D1609F97ADEC31 |+--------------------+--------------+---------- ---------------------+

Optie 5 – sys.key_constraints

U kunt de sys.key_constraints . filteren bekijk een CONSTRAINT_TYPE van PK om een ​​lijst met tabellen met primaire sleutels te krijgen.

SELECT SCHEMA_NAME(schema_id) AS [Schema], OBJECT_NAME(parent_object_id) AS [Table]FROM sys.key_constraints WHERE type ='PK';

Resultaat:

+----------+---------+| Schema | Tabel ||----------+---------|| dbo | Artiesten || dbo | Genres || dbo | Albums || dbo | Land |+----------+---------+

Hier is het weer met de naam van de primaire sleutel:

SELECT SCHEMA_NAME(schema_id) AS [Schema], OBJECT_NAME(parent_object_id) AS [Table], nameFROM sys.key_constraints WHERE type ='PK';

Resultaat:

+----------+---------+------------------------- ------+| Schema | Tafel | naam ||----------+---------+-------------------------- -----|| dbo | Artiesten | PK__Artiesten__25706B50FCD918B1 || dbo | Genres | PK__Genres__0385057E88BB96F8 || dbo | Albums | PK__Albums__97B4BE379FC780BD || dbo | Land | PK__Land__10D1609F97ADEC31 |+----------+---------+-------------------------- -----+

Optie 6 – sys.objects

De sys.objects systeemweergave is populair voor het retourneren van informatie over objecten met schemabereik, inclusief primaire sleutels.

SELECT SCHEMA_NAME(schema_id) AS [Schema], OBJECT_NAME(parent_object_id) AS [Table]FROM sys.objects WHERE type ='PK';

Resultaat:

+----------+---------+| Schema | Tabel ||----------+---------|| dbo | Artiesten || dbo | Genres || dbo | Albums || dbo | Land |+----------+---------+

Net als bij de vorige twee voorbeelden, kunnen we de name kolom van deze weergave om de naam van de primaire sleutel weer te geven:

SELECT SCHEMA_NAME(schema_id) AS [Schema], OBJECT_NAME(parent_object_id) AS [Table], nameFROM sys.objects WHERE type ='PK';

Resultaat:

+----------+---------+------------------------- ------+| Schema | Tafel | naam ||----------+---------+-------------------------- -----|| dbo | Artiesten | PK__Artiesten__25706B50FCD918B1 || dbo | Genres | PK__Genres__0385057E88BB96F8 || dbo | Albums | PK__Albums__97B4BE379FC780BD || dbo | Land | PK__Land__10D1609F97ADEC31 |+----------+---------+-------------------------- -----+

Optie 7 – OBJECTPROPERTYEX()

De OBJECTPROPERTYEX() functie werkt net als de OBJECTPROPERTY() functie, behalve dat het meer eigenschappen ondersteunt. Daarom is elk van de voorgaande voorbeelden die gebruik maken van OBJECTPROPERTY() , kan gemakkelijk worden herschreven om OBJECTPROPERTYEX() . te gebruiken .

Ik zou bijvoorbeeld het eerste voorbeeld op deze pagina als volgt kunnen herschrijven:

SELECT SCHEMA_NAME(schema_id) AS [Schema], naam AS [Tabel]FROM sys.tablesWHERE OBJECTPROPERTYEX(object_id, 'TableHasPrimaryKey') =1ORDER BY [Schema], [Tabel];

Resultaat:

+----------+---------+| Schema | Tabel ||----------+---------|| dbo | Albums || dbo | Artiesten || dbo | Land || dbo | Genres |+----------+---------+

Ik moet vermelden dat OBJECTPROPERTYEX() retourneert een sql_variant gegevenstype, terwijl OBJECTPROPERTY() retourneert een int .


  1. Hoe roep ik een opgeslagen procedure met argumenten aan met sqlcmd.exe?

  2. Is er een manier om overbelasting van functies in Postgres uit te schakelen?

  3. 3 manieren om alle tabellen te retourneren ZONDER een primaire sleutel in SQL Server

  4. ODBC gebruiken met Salesforce en Okta Single Sign On (SSO)