Accueil > SGBDR, Sql Server > [SQLServer] Quelques tables systèmes

[SQLServer] Quelques tables systèmes

A l’instar du billet sur les tables systèmes de Sybase, voici un billet autour des tables systèmes de SQL Server.
Vu les éléments similaires, je vais passer assez vite, ceci dit (j’avoue, ce billet va me servir pour mémoire :)).

Pour obtenir la source d’un élément (procédure stockée, par exemple), c’est la même requête :

SELECT com.text AS TEXT 
FROM dbo.sysobjects obj 
INNER JOIN dbo.syscomments com 
    ON com.id = obj.id 
INNER JOIN dbo.sysusers users ON users.uid = users.uid
WHERE obj.name LIKE '<mon élément>' 
AND obj.type = 'P'  -- facultatif
AND users.name = 'dbo' 
ORDER BY obj.name, com.colid

Idem pour rechercher une chaîne, donc :

SELECT 
    obj.name AS 'PROC',
    com.text AS TEXT 
FROM dbo.sysobjects obj 
INNER JOIN dbo.syscomments com 
    ON com.id = obj.id 
INNER JOIN dbo.sysusers users ON users.uid = users.uid
WHERE obj.type = 'P' 
AND lower(com.text) LIKE lower('%TODO%')
AND users.name = 'dbo' 
ORDER BY obj.name, com.colid

Pour avoir des informations sur une table, la requête est un peu différente et remonte plus d’informations que celle de Sybase (comprendre que j’avais besoin de plus d’infos, donc j’ai poussé un peu le sujet !) :

SELECT cols.name AS Column_name, 
    types.name AS Type, 
    CASE WHEN cols.collation_name IS NOT NULL THEN cols.max_length ELSE cols.precision END AS Prec,
    cols.scale AS Scale,
    cols.is_identity AS Is_Identity,
    cols.is_computed AS Is_Computed,
    ISNULL(IsPrimaryKey, 0) AS Is_PrimaryKey,
    cols.is_nullable AS Is_Nullable
FROM sys.columns cols
INNER JOIN sys.types types
    ON types.system_type_id = cols.system_type_id
LEFT JOIN (
    SELECT  kcu.table_name as TABLE_NAME,
            kcu.column_name as COLUMN_NAME,
            1 AS IsPrimaryKey
    FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
    INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS  tc
    ON tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
    AND tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
) keys
    ON keys.COLUMN_NAME = cols.name
    AND keys.TABLE_NAME = Object_Name(cols.object_id)
WHERE Object_Name(cols.object_id) = '<TABLE>'
ORDER BY column_id

Ceci dit, le champ type de la table sysobjects comprends plus de valeurs possibles (24 en tout) que pour Sybase.
Là, je renvois directement vers la site de la MSDN pour plus d’informations : table sysobjects.

Comme on peut le voir, Sybase et SQL Server sont quand même assez proches l’un de l’autre.

Mais l’avantage de SQL Server, c’est quand même aussi SQL Server Management Studio.
Par exemple, il est possible de voir la liste des vues systèmes (Bases de données\Vues\Vues Systèmes), des fonctions prédéfinies (Bases de données\Programmabilité\Fonctions) ou des types ((Bases de données\Programmabilité\Types).
Et puis, la MSDN aussi, aide beaucoup, par exemple avec la liste des tables systèmes détaillées : Compatibility Views (Transact-SQL).

Donc, au final, ma préférence va à SQL Server. D’autant plus que son intégration est bien plus poussée dans l’écosystème Microsoft !

Catégories :SGBDR, Sql Server
  1. Aucun commentaire pour l’instant.
  1. No trackbacks yet.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :