sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server INFORMATION_SCHEMA Visningar | Se om det finns en tabell

Vad är problemet?

När du skriver frågor för en databas som du kanske är ny på, eller en som ändras ofta, kanske du vill köra en snabbkontroll för att hitta alla tabeller i en specifik databas, eller kolumnerna i databasen, eller för att söka efter tabell eller kolumn finns.

Varför är detta ett problem?

Att förstå schemat och vilka tabeller som finns i det hjälper till att skriva effektiv SQL och hjälper till att undvika att köra frågor flera gånger bara för att se om schemanamnet eller kolumnnamnet är korrekt.

Denna handledning hjälper dig att lösa dessa problem.

Använda informationsschemat

Att fråga metadata på en datakälla är det enklaste sättet att bestämma sammansättningen av en tabell om du inte redan har en förståelse för den. Microsoft SQL Server tillhandahåller en informationsschemavy som en av flera metoder för att erhålla denna metadata. Som deras supportdokumentation säger, "Informationsschemavyer ger en intern, systemtabelloberoende vy av SQL Server-metadata. Informationsschemavyer gör det möjligt för applikationer att fungera korrekt även om betydande ändringar har gjorts i de underliggande systemtabellerna."

Vi kommer att använda ett par av vyerna i informationsschemat för att köra frågor som hjälper till att bestämma sammansättningen av tabeller i datakällan.

För att visa TABLES och COLUMNS i databasen eller hitta TABLES och COLUMNS .

Denna första fråga kommer att returnera alla tabeller i databasen du frågar efter.

SELECT
  	TABLE_NAME
FROM
  	INFORMATION_SCHEMA.TABLES

Den andra frågan returnerar en lista över alla kolumner och tabeller i databasen du frågar efter.

SELECT
  	TABLE_NAME,
COLUMN_NAME
FROM
  	INFORMATION_SCHEMA.COLUMNS

Eller så kan du bara fråga efter COLUMNS från en specifik tabell och returnera kolumnnamnen från den specifika tabellen "Album" i vår databas.

SELECT
	COLUMN_NAME
FROM
  	INFORMATION_SCHEMA.COLUMNS
WHERE
	TABLE_NAME = 'Album'

Med denna nästa fråga kan du ta reda på om det finns en TABLE eller inte i datakällan som matchar någon typ av sökparametrar.

IF EXISTS(
SELECT
  			*
  		FROM
  			INFORMATION_SCHEMA.TABLES
  		WHERE
  			TABLE_NAME = 'Album'
			)
SELECT 'found' AS search_result ELSE SELECT 'not found' AS search_result;

Frågan returnerar ordet "hittad" om tabellen "Album" finns i vår databas.

För att ta det lite längre kan du använda den här frågan för att ta reda på om det finns en COLUMN i datakällan som matchar någon typ av sökparametrar.

IF EXISTS(
SELECT
  				*
  			FROM
  				INFORMATION_SCHEMA.COLUMNS
  			WHERE
  				COLUMN_NAME = 'Title'
				)
SELECT 'found' AS search_result ELSE SELECT 'not found' AS search_result;

Använder INFORMATION_SCHEMA visa i din datakälla kan vara ett tillförlitligt sätt att avgöra vad som finns i datakällan medan du bygger dina frågor.

För mer information om Microsoft SQL Server System Information Schema Views, läs mer från deras supportdokument.


  1. Hur frågar jag efter alla datum som är större än ett visst datum i SQL Server?

  2. Hur man ansluter en Oracle-databas från PHP

  3. Få totalt antal rader när du använder LIMIT?

  4. SQLite DROP TABELL