我正在嘗試創建一個接受(SQL Server)數據庫表的存儲過程,並返回每列的摘要。如何計算給定表和列名稱的數據庫列統計信息?
大多數我想要的是從INFORMATION_SCHEMA.COLUMNS
可用,但對於數字列我想包括一些基本的統計數據,如平均/分/最大。
我的計劃是有一個這樣的查詢:
SELECT
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE AS DataType,
CASE
WHEN DATA_TYPE IN (
'bigint', 'bit', 'date', 'datetime', 'datetime2',
'datetimeoffset', 'decimal', 'float', 'int', 'money',
'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney',
'time', 'timestamp', 'tinyint')
THEN dbo.GetMin(TABLE_NAME, COLUMN_NAME)
ELSE NULL
END AS MinSql
FROM INFORMATION_SCHEMA.COLUMNS
和用戶定義的函數GetMin
時,他的屍體是這樣的:
DECLARE @Sql varchar(MAX) = CONCAT(
'SELECT MIN(',
@ColumnName,
') FROM ',
@TableName
''';'
);
EXEC(@Sql);
不幸的是,來電EXEC
不允許在UDF內部。
我怎麼可以:
返回給在服用
MIN
(和其它數據)的所有列的表名和列名,或循環統計像
MIN
,?
http://www.sommarskog.se/dynamic_sql.html – Jodrell