Dilbert
Neuer Benutzer
- Beiträge
- 4
Hallo,
ich muss eine Art Export-Funktion für MS-SQL Datenbanken (ab Version 2008) programmieren.
Dazu brauche ich einige Informationen über die DB sowie deren Tabellen.
Vieles bekomme ich auch problemlos heraus.
Manches bequem, anderes über Umwege. (Vielleicht hat ja jemand noch elegantere Lösungen?)
Ich bekomme bereits:
- die Tabellennamen:
Select * From sys.tables
- Die Spaltennamen:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Test'
- Mit obiger Abfrage auch ob es "Nullable" ist, sowie den Datentyp.
- Die Primärschlüssel (ist aber recht aufwändig, geht das auch eleganter?):
SELECT i.name AS index_name
,ic.index_column_id
,key_ordinal
,c.name AS column_name
,TYPE_NAME(c.user_type_id)AS column_type
,is_identity
FROM sys.indexes AS i
INNER JOIN sys.index_columns AS ic
ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN sys.columns AS c
ON ic.object_id = c.object_id AND c.column_id = ic.column_id
WHERE i.is_primary_key = 1
AND i.object_id = OBJECT_ID('test')
- In der obigen Abfrage steckt auch die "IsIdentity", aber nur für den PK
Was mir fehlt:
1.
Ich brauche die "IsIdentity" auch wenn es KEIN Primärschlüssel ist.
2.
Den Datentyp in "verwertbarer" Form.
Ich bekomme mit obiger Abfrage leider nur "VarChar", und im getrennten Feld die Länge.
Wenn ich daraus eine neue Tabelle anlegen soll, muss ich das wieder zusammen basteln.
Und das ist leider für fast jeden Datentyp in einem anderen Feld!?!
Also müsste ich für jeden Datentyp irgendetwas eigenes stricken.
Da gibt es doch bestimmt etwas eleganteres!
3.
Die Namen indizierter Spalten.
4.
Ich brauche die "Change-Tracking" Eigenschaften der gesamten Tabelle.
(Nicht für die Spalten einzeln nötig)
5.
Ich brauche die "Change-Tracking" Eigenschaften der Datenbank.
Da ich ja Optimist bin habe ich noch die Hoffnung, dass es eine SP gibt, die mir genau diese Daten in einer einzigen hübschen Tabelle bequem zurück gibt.
Hat jemand Ideen?
Bye,
Dilbert
ich muss eine Art Export-Funktion für MS-SQL Datenbanken (ab Version 2008) programmieren.
Dazu brauche ich einige Informationen über die DB sowie deren Tabellen.
Vieles bekomme ich auch problemlos heraus.
Manches bequem, anderes über Umwege. (Vielleicht hat ja jemand noch elegantere Lösungen?)
Ich bekomme bereits:
- die Tabellennamen:
Select * From sys.tables
- Die Spaltennamen:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Test'
- Mit obiger Abfrage auch ob es "Nullable" ist, sowie den Datentyp.
- Die Primärschlüssel (ist aber recht aufwändig, geht das auch eleganter?):
SELECT i.name AS index_name
,ic.index_column_id
,key_ordinal
,c.name AS column_name
,TYPE_NAME(c.user_type_id)AS column_type
,is_identity
FROM sys.indexes AS i
INNER JOIN sys.index_columns AS ic
ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN sys.columns AS c
ON ic.object_id = c.object_id AND c.column_id = ic.column_id
WHERE i.is_primary_key = 1
AND i.object_id = OBJECT_ID('test')
- In der obigen Abfrage steckt auch die "IsIdentity", aber nur für den PK
Was mir fehlt:
1.
Ich brauche die "IsIdentity" auch wenn es KEIN Primärschlüssel ist.
2.
Den Datentyp in "verwertbarer" Form.
Ich bekomme mit obiger Abfrage leider nur "VarChar", und im getrennten Feld die Länge.
Wenn ich daraus eine neue Tabelle anlegen soll, muss ich das wieder zusammen basteln.
Und das ist leider für fast jeden Datentyp in einem anderen Feld!?!
Also müsste ich für jeden Datentyp irgendetwas eigenes stricken.
Da gibt es doch bestimmt etwas eleganteres!
3.
Die Namen indizierter Spalten.
4.
Ich brauche die "Change-Tracking" Eigenschaften der gesamten Tabelle.
(Nicht für die Spalten einzeln nötig)
5.
Ich brauche die "Change-Tracking" Eigenschaften der Datenbank.
Da ich ja Optimist bin habe ich noch die Hoffnung, dass es eine SP gibt, die mir genau diese Daten in einer einzigen hübschen Tabelle bequem zurück gibt.
Hat jemand Ideen?
Bye,
Dilbert