- /*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)
/*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)