2016-08-02 50 views
0

我需要一個SQL Server查詢(最好用於SQL Server 2012+),它將返回所有非系統存儲過程,函數,表格和視圖,並且還將返回所有相關參數/列名稱的簡單列表。SQL Server查詢返回所有存儲過程,函數,表和視圖及其參數/列

簡單的列表應該像CSV一樣,儘管JSON是首選。

目標是能夠運行查詢並獲取具有足夠信息的實體列表,以便能夠構建進一步的查詢/執行語句到基本級別。

回答

0

我在回答我自己的問題。我發現了許多與舊版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類型的列名/參數名列表。

+0

***觸發器,類型,規則,默認.. ***? – Kiquenet

相關問題