0
我需要一個SQL Server查詢(最好用於SQL Server 2012+),它將返回所有非系統存儲過程,函數,表格和視圖,並且還將返回所有相關參數/列名稱的簡單列表。SQL Server查詢返回所有存儲過程,函數,表和視圖及其參數/列
簡單的列表應該像CSV一樣,儘管JSON是首選。
目標是能夠運行查詢並獲取具有足夠信息的實體列表,以便能夠構建進一步的查詢/執行語句到基本級別。
我需要一個SQL Server查詢(最好用於SQL Server 2012+),它將返回所有非系統存儲過程,函數,表格和視圖,並且還將返回所有相關參數/列名稱的簡單列表。SQL Server查詢返回所有存儲過程,函數,表和視圖及其參數/列
簡單的列表應該像CSV一樣,儘管JSON是首選。
目標是能夠運行查詢並獲取具有足夠信息的實體列表,以便能夠構建進一步的查詢/執行語句到基本級別。
我在回答我自己的問題。我發現了許多與舊版SQL Server相關的答案。但我也發現很多答案都是零碎的,我想要一些「更好」(有希望)作爲出發點。
這:
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
這將產生三列,所述第一與所述實體的名稱,所述第二與表或視圖,或「SF的「類型」(無論是「TV」 '用於存儲過程或函數),第三個是JSON類型的列名/參數名列表。
***觸發器,類型,規則,默認.. ***? – Kiquenet