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.
*** Trigger, Typen, Regeln, Defaults .. ***? – Kiquenet