MS SQL Tabellen Definition

Oftmals ist es hilfreich komplette Tabellen programmatisch auszulesen und zu verarbeiten.

Ausgeführt werden alle Queries gegen ein MS SQL DBMS auf einem Ubuntu Server. Insgesamt sind die Linux Ports des MS SQL Servers sehr kompatibel zur ursprünglichen Windows Installation.

sys.tables

Zunächst sind alle definierten Tabellen innerhalb sys.tables zu finden.

SELECT
*
FROM
sys.tables as tables
WHERE
tables.name IS NOT NULL

Wie sicherlich bereits vermutet, repräsentiert das Feld name den Namen der Tabelle. Für weitere Verarbeitung ist allerdings das Feld object_id zur eindeutigen Identifizierung nötig.

SELECT
tables.object_id
FROM
sys.tables as tables
WHERE
tables.name = 'nameOfTheTable'

sys.columns

Nachfolgend finden sich innerhalb der sys.columns alle Spaltendefinition.

SELECT
columns.*
FROM
sys.columns as columns
WHERE
columns.object_id = 'theObjectId'

Wie zuvor angeführt, kann object_id genutzt werden, um alle Spalten einer Tabelle zu referenzieren.

sys.columns and sys.tables in conjunction

Um nun alle Spalten einer Tabelle anhand des Tabellennamens anzufragen, kann nachfolgende Query genutzt werden.

SELECT
cols.*
FROM
sys.tables as tables
INNER JOIN
sys.all_columns as cols
ON
cols.OBJECT_ID = tables.OBJECT_ID
WHERE
tables.name = 'nameOfTheTable'
SELECT
columns.name AS 'Name',
columns.system_type_id AS 'Datatype'
FROM
sys.tables as tables
INNER JOIN
sys.all_columns as columns
ON
columns.object_id = tables.object_id
WHERE tables.name = 'nameOfTheTable'

sys.types

Nun finden sich innerhalb sys.types alle Typendefinitionen. Zum Abschluss dieses Beitrags hier eine Query, welche Spaltennamen, Datentyp und maximale Länge einer jeden Spalte einer definierten Tabelle anfragt.

SELECT
columns.name AS 'Name',
types.name AS 'Datatype',
columns.max_length AS 'Length'
FROM
sys.tables as tables
INNER JOIN
sys.all_columns as columns
ON
columns.object_id = tables.object_id
INNER JOIN
sys.types as types
ON
columns.system_type_id = types.system_type_id
WHERE tables.name = 'nameOfTheTable'

Schreiben Sie einen Kommentar