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 !
