Immer wieder liest man Fragen, wie man über alle Datenbanken einer Instanz hinweg, alle Tabellen plus Spalten und deren Datentypen usw... auslesen kann
Um all diesen Personen die schwierigen Bedienung einer Internet-Suchmaschine abzunehmen ist hier ein Skript, das ich in 10 Minuten gerade geschrieben habe. Es erhebt keinerlei Anspruch auf Effektivität, Fehlerfreiheit, Vollständigkeit und/oder ähnliches, sondern soll vielmehr als Denkanstoss dienen.
DECLARE @Databases TABLE (dbname sysname);
DECLARE @Database sysname;
DECLARE @DatabaseCmd sysname;
DECLARE @sql nvarchar(2000)
INSERT INTO @Databases
(dbname)
SELECT
D.name
FROM
sys.databases D
WHERE
D.database_id > 5
SELECT
@Database = MIN(D.dbname),
@DatabaseCmd = @Database + '.sys.sp_ExecuteSQL'
FROM
@Databases D;
WHILE @Database IS NOT NULL
BEGIN
SELECT @sql = '
SELECT
DB_NAME() as CurrentDatabase,
O.name AS TableName,
C.name AS ColumnName,
C.column_id,
S.name,
S.length,
C.precision,
C.scale,
C.is_nullable
FROM
sys.objects O
JOIN
sys.columns C ON O.object_id = C.object_id
JOIN
sys.systypes S ON C.system_type_id = S.xtype
WHERE
O.type = ''U'' AND
O.is_ms_shipped = 0
ORDER BY
O.name,
C.column_id'
EXEC @DatabaseCmd @sql;
DELETE
@Databases
WHERE
dbname = @Database;
SELECT
@Database = MIN(D.dbname),
@DatabaseCmd = @Database + '.sys.sp_ExecuteSQL'
FROM
@Databases D;
END
Kommentare zur Erweiterung sind gerne willkommen. ;-)