Mar*_*lli 8 sql-server statistics metadata sql-server-2014
这里有一个非常相似的问题:
但这不是我想要的。
我想完全取回我输入的内容。例如:
CREATE STATISTICS [_MM_STATS__745366020_7_1_4_5_2_3]
ON [dbo].[ProductShipTax]
([TaxRegionId], [ProductShipTaxID], [TaxRate], [ItemNo], [DateFrom], [DateTo])
Run Code Online (Sandbox Code Playgroud)
我想要一个查询,它可以让我获得上面的确切脚本,以便我可以将它应用到不同的数据库。
这可能吗?
下面是支持此语法子集的 2005+ 兼容选项。
CREATE STATISTICS statistics_name
ON { table_or_indexed_view_name } ( column [ ,...n ] )
[ WHERE <filter_predicate> ]
[ WITH
[ STATS_STREAM = stats_stream ]
[ [ , ] NORECOMPUTE ]
[ [ , ] INCREMENTAL = { ON | OFF } ]
] ;
Run Code Online (Sandbox Code Playgroud)
注意:但是,对 2005 的支持有些有限。产品本身不支持增量或过滤的统计数据,我还没有引入对 stats 流的支持,因为在将此功能添加到CONVERT.
DECLARE @Schema sysname,
@Table sysname,
@StatsName sysname,
@IncludeStatsStream BIT,
@StatsStream VARCHAR(MAX),
@TwoPartQuotedName NVARCHAR(500);
select @Schema = 'dbo',
@Table = 'T1',
@StatsName = 'S1',
@IncludeStatsStream = 0;
select @TwoPartQuotedName = QUOTENAME(@Schema) + '.' + QUOTENAME(@Table);
IF @IncludeStatsStream = 1 AND @@MICROSOFTVERSION/ POWER(2,24) > 9
BEGIN
DECLARE @StatsResults TABLE
(
StatsStream VARBINARY(MAX),
Rows BIGINT,
DataPages BIGINT
);
INSERT INTO @StatsResults
EXEC sys.sp_executesql
N'DBCC SHOW_STATISTICS(@TwoPartQuotedName, @StatsName) WITH STATS_STREAM;',
N'@TwoPartQuotedName NVARCHAR(500), @StatsName sysname',
@TwoPartQuotedName = @TwoPartQuotedName,
@StatsName = @StatsName;
--Would need some other method on 2005 hence just skipping this
SELECT @StatsStream = CONVERT(VARCHAR(MAX), StatsStream, 1)
FROM @StatsResults;
END;
WITH stats AS
(
/*
Support earlier versions without these columns using trick from http://dba.stackexchange.com/a/66755/3690 */
SELECT x.*
FROM (SELECT NULL AS filter_definition, NULL AS is_incremental) AS dummy
CROSS APPLY
(
SELECT object_id, stats_id, name, no_recompute, filter_definition, is_incremental
FROM sys.stats
) AS x
)
SELECT '
CREATE STATISTICS ' + QUOTENAME(name) + '
ON ' + @TwoPartQuotedName + ' (' + SUBSTRING(cols, 2, 10000000) +')
' +
ISNULL(' WHERE ' + filter_definition,'') +
ISNULL(STUFF (
ISNULL(',STATS_STREAM = ' + @StatsStream, '') +
CASE WHEN no_recompute = 1 THEN ',NORECOMPUTE' ELSE '' END +
CASE WHEN is_incremental = 1 THEN ',INCREMENTAL=ON' ELSE '' END
, 1 , 1 , ' WITH ' ) , '') AS [processing-instruction(x)]
FROM stats s
CROSS APPLY (SELECT ',' + QUOTENAME(c.name)
FROM sys.stats_columns sc
JOIN sys.columns c
ON c.object_id = sc.object_id
AND c.column_id = sc.column_id
WHERE sc.object_id = s.object_id
AND sc.stats_id = s.stats_id
ORDER BY sc.stats_column_id
FOR XML PATH(''))CA(cols)
WHERE s.object_id = OBJECT_ID(@TwoPartQuotedName)
AND s.name = @StatsName
FOR XML PATH('');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9759 次 |
| 最近记录: |