2016-08-02 9 views
0

Ich brauche eine SQL Server-Abfrage (vorzugsweise für SQL Server 2012 +), die eine Liste aller nicht gespeicherten Prozeduren, Funktionen zurückgibt , Tabellen und Views, die auch eine einfache Liste aller zugehörigen Parameter/Spaltennamen zurückgeben.SQL Server Abfrage, um alle gespeicherten Prozeduren, Funktionen, Tabellen und Ansichten mit ihren Parametern/Spalten

Die einfache Liste sollte so etwas wie eine CSV sein, obwohl JSON bevorzugt wird.

Ziel ist es, in der Lage zu sein, die Abfrage auszuführen und eine Liste von Entitäten mit genügend Informationen zu erhalten, um weitere Abfragen/Anweisungen auf einer grundlegenden Ebene zu konstruieren.

Antwort

0

Ich beantworte meine eigene Frage. Ich habe viele Antworten gefunden, die sich auf viel ältere Versionen von SQL Server beziehen. Aber ich fand auch viele der Antworten fragmentarisch und ich wollte etwas, das (hoffentlich) ein bisschen "besser" war als Ausgangspunkt.

Hier ist sie:

SELECT DISTINCT 
    QUOTENAME(isc2.TABLE_SCHEMA) + '.' + QUOTENAME(isc2.TABLE_NAME) AS sqlEntName 
    , 'TV' AS sqlEntType 
    , '{' + SUBSTRING((
    SELECT ',\"' + isc1.COLUMN_NAME + '\":\"' + isc1.DATA_TYPE + '\" ' 
    FROM INFORMATION_SCHEMA.COLUMNS isc1 
    WHERE QUOTENAME(isc1.TABLE_SCHEMA) + '.' + QUOTENAME(isc1.TABLE_NAME) 
     = QUOTENAME(isc2.TABLE_SCHEMA) + '.' + QUOTENAME(isc2.TABLE_NAME) 
    ORDER BY ORDINAL_POSITION 
    FOR XML PATH ('') 
), 2, 1024) + '}' AS sqlClmPrmNames 
FROM INFORMATION_SCHEMA.COLUMNS isc2 
UNION 
SELECT DISTINCT 
    QUOTENAME(isp2.SPECIFIC_SCHEMA) + '.' + QUOTENAME(isp2.SPECIFIC_NAME) AS sqlEntName 
    , 'SF' AS sqlEntType 
    , ISNULL('{' + SUBSTRING((
    SELECT ',\"' + isp1.PARAMETER_NAME + '\":\"' + isp1.DATA_TYPE + '\" ' 
    FROM INFORMATION_SCHEMA.PARAMETERS isp1 
    WHERE QUOTENAME(isp1.SPECIFIC_SCHEMA) + '.' + QUOTENAME(isp1.SPECIFIC_NAME) NOT IN 
     (SELECT QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) 
     FROM sys.all_objects 
     WHERE is_ms_shipped = 1 AND [type] IN ('P')) 
    AND QUOTENAME(isp1.SPECIFIC_SCHEMA) + '.' + QUOTENAME(isp1.SPECIFIC_NAME) 
     = QUOTENAME(isp2.SPECIFIC_SCHEMA) + '.' + QUOTENAME(isp2.SPECIFIC_NAME) 
    ORDER BY QUOTENAME(isp1.SPECIFIC_SCHEMA) + '.' + QUOTENAME(isp1.SPECIFIC_NAME) 
     , isp1.ORDINAL_POSITION 
    FOR XML PATH ('') 
), 2, 1024) + '}', '{}') AS sqlClmPrmNames 
FROM INFORMATION_SCHEMA.PARAMETERS isp2 
WHERE isp2.SPECIFIC_NAME NOT LIKE '%diagram%' -- You may need to remove this final filter clause 

Dies wird drei Spalten ergeben, die erste mit dem Namen des Unternehmens, die zweite mit dem ‚Typ‘ (entweder ‚TV‘ für die Tabelle oder Sicht oder ‚SF 'für gespeicherte Prozedur oder Funktion), und die dritte mit einer JSON-esque-Liste von Spaltennamen/Parameternamen.

+0

*** Trigger, Typen, Regeln, Defaults .. ***? – Kiquenet

Verwandte Themen