Liste des bases,tables et colonnes triés par type (procedure stockés,vues,tables utlisateur,tables systeme etc....)

5/5 (3 avis)

Snippet vu 12 615 fois - Téléchargée 27 fois

Contenu du snippet

Ce code liste a l'aide d'un curseur liste la base de donnée d'un serveur SQL sur IIS
il doit etre possible de le rendre plsu rapide en evitant le curseur je n'ai pas encore trouvé,
voici donc une methode qui permet de lister le tout a partir d'un curseur,
je mettrais ma source a jour si je trouve le moyen de le faire sans passer par le curseur car pour l'insatnt c'est un peu long des que la base de donnée devient importante.
En tout cas peut etre utile pour dresser un tree view de la base de donnée a condition de ne pas avoir une trop grosse base de donnée.

Source / Exemple :


/*Petite Mise a Jour : Cette requete fait la meme Chose que le curseur du dessous mais la fonction sp_Msforeachhdb n'est pas documentée dans SQL server donc a utliser avec precaution*/

exec sp_Msforeachdb 'SELECT ''?'' as nameBase,O.name as nameTable,O.TYPE,C.name as nameColumn FROM "?".dbo.sysobjects O LEFT JOIN "?".dbo.syscolumns C on C.id=O.id'

rem : le ? remplace le nom des bases de données, la fonction sp_Msforeachdb remplace elle meme le ? par le nom de toutes les Tables

/*Meme Chose mais avec curseur (10* plus lent)*/
DECLARE C_Base CURSOR 
FOR 
	SELECT
	      B.name AS NomBase,
	      B.dbid AS IdBase
	FROM 
	      master.dbo.sysdataBases B
	      LEFT JOIN master.dbo.sysobjects O
	      on O.id=B.dbid

DECLARE @Base as varchar(50)
DECLARE @Id as int
DECLARE @SQL as varchar(5000)
declare @Tri as int
DECLARE @i as int

SET @i=0
SET @SQL='SELECT maBase,nameTable,nameColumn,
		 NomType=
      		     CASE type
         		WHEN ''U'' THEN ''Tables Utilisateur''
         		WHEN ''FN'' THEN ''Fonctions''
         		WHEN ''P'' THEN ''Procedure Stockée''
         		WHEN ''S'' THEN ''Tables Systemes''
         		WHEN ''TR'' THEN ''Triggers''
			WHEN ''V'' THEN ''VUES''
         		ELSE ''Autre''
      		     END,
	   	 Tri=
		     CASE type
			WHEN ''U'' THEN ''1''
			WHEN ''FN'' THEN ''5''
			WHEN ''P'' THEN ''4''	
			WHEN ''S'' THEN ''2''	
			WHEN ''TR'' THEN ''6''
			WHEN ''V'' THEN ''3''
			ELSE 7
			END FROM ('

OPEN C_Base
FETCH C_Base INTO @Base,@Id
	WHILE @@FETCH_STATUS = 0
	BEGIN
		IF @i>0 
		BEGIN
			SET @SQL = @SQL + ' UNION '
		END
		SET @SQL = @SQL + ' SELECT ''' + @Base + ''' as maBase,O.name as nameTable,O.TYPE,C.name as nameColumn FROM [' + @Base + '].dbo.sysobjects O LEFT JOIN [' + @Base + '].dbo.syscolumns C on C.id=O.id'
	SET @i=@i+1
	FETCH C_Base INTO @Base,@Id
	END
CLOSE C_Base
DEALLOCATE C_Base
SET @SQL= @SQL + ')AS NewVue ORDER BY maBase,Tri,nameTable,NameColumn'
exec(@SQL)

A voir également

Ajouter un commentaire Commentaires
crilun Messages postés 114 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 17 octobre 2006
28 avril 2006 à 14:53
tu peut expliquer plus je voit pas tres bien ce que tu veut faire?
si tu pouvais donner un exemple ocncret de ce que tu veut faire je pourrais peut etre te repondre mais la je vois pas trop ce que tu veut faire???
zekabyle Messages postés 28 Date d'inscription lundi 6 mars 2006 Statut Membre Dernière intervention 2 janvier 2007
27 avril 2006 à 18:29
j'utilise deux bases "portefeuille" sur access dans le même dossier et je veux faire une liaison dynamique entre ces deux bases pour pouvoir utiliser les tables selon leur propre base.
Comment faire?
merci
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
27 oct. 2005 à 23:52
Intéressant.
je ne connaissais pas la fonction présentée en premier plan.
Romelard Fabrice

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.