SQL SERVER 2005: le tabelle di sistema .SYS



SQL SERVER 2005 il database engine di Microsoft utilizza se stesso per l’archiviazione delle informazioni fondamentali al suo funzionamento.
Cioe’ significa che alcuni database e ed alcune tabelle con nomi particolari contengono informazioni del motore del database, e possono essere viste con delle query anche dagli utenti.

Di seguito elenco alcune di queste tabelle (solo alcune per introdurre l’argomento) che possono esserre utili a chi lavora con SQL SERVER.

Iniziamo dunque come avere la lista di tutte le tabelle del database corrente sfruttando la tabella sys.tables:

SELECT * FROM sys.tables

Alcuni dei campi in questa tabella sono molto utili:

name = nome della tabella
object_id = codice numerico che corrisponde alla tabella e che la referenzia in altre sys.
create_date = data di creazione della tabella
modify_date = data di ultima modifica della tabella
max_column_id_used = numero di colonne presenti nella tabella

A questo punto potrebbe essere interessante sapere di che tipo i campi nella nostra tabella e possiamo ottenerlo con la tabella di sistema sys.columns, ma in questa tabella non abbiamo direttamenta il nome della tabelle, ma il suo object_id, quindi dobbiamo effettuare la query unendola con la tabella precedente:

SELECT T.name, C.*
FROM sys.tables T, sys.columns C
where T.object_id = C.object_id

Questa query ritorna tutti i campi di tutte le tabelle. Se vogliamo avere le caratteristiche di una unica tabella dobbiamo aggiungere la selezione della stessa con:

SELECT T.name, C.*
FROM sys.tables T, sys.columns C
where T.object_id = C.object_id
and T.name = 'NOMETABELLA'

I campi maggiormente importanti in questa tabella sono i seguenti:

name = nome del campo
system_type_id = indica il codice del tipo del campo
max_length = lunghezza in byte del campo
is_nullable = 1 se nel campo può contenete un valore NULL

Per questa panoramica usiamo una query che, unendo del tabelle di SYS viste fino ad ora, con l’utilizzo di alcune funzioni proprie di SQL SERVER per la decodifica di parametri (come ColumnProperty) che ritornano le relative descrizioni dei campi codice:

SELECT T.name AS table_name,
C.name,
type_name(c.system_type_id) AS DATA_TYPE,
C.is_nullable,
object_definition(C.default_object_id) AS column_default,
ColumnProperty(C.object_id, c.name, 'charmaxlen') AS length,
C.precision AS numeric_precision,
odbcscale(C.system_type_id, c.scale) AS numeric_scale,
CollationProperty(C.collation_name, 'sqlcharsetname') AS character_set_name,
C.collation_name,
ColumnProperty(c.object_id, c.name, 'ordinal') AS ordinal_position
FROM sys.tables T
JOIN sys.columns C ON C.object_id = T.object_id
WHERE T.name = 'NOMETABELLA'

Sul sito http://www.abspace.it/ComputerSpace/SQLCheatSheet.asp è presente l’elenco di tutte le principali tabelle SYS.

Questa è solo una breve introduzione alle tabelle di sistema di SQL SERVER, ma mi auguro possa essere di vostro gradimento.

alberto bellina

Annunci sponsorizzati:
Condividi su Facebook Condividi su Twitter!
  • salvatore

    ciao…
    Io dovrei inserire i dati delle relazioni presenti sul database in un unica tabella. Nella tabella ho inserito i campi (ID, NomTab1, NomCam1, NomTab2, NomCam2, TipoRel). Potresti Darmi un pò di codice su salvat.scognamiglio@hotmail.it
    Grazie

Pinterest