用评论创建索引

Mag*_*ier 3 index ssms sql-server-2008-r2

我想在我的索引中添加一些评论。所以我在索引创建脚本中添加了一些额外的信息,希望在我再次打开脚本时再次看到这个评论。但它不见了。

样本:

CREATE NONCLUSTERED INDEX test3
/* 
 Created on ...
 Reason: ... 
 Improvement: 95 - 99,8% ...
*/
ON [dbo].[T] 
(   
/* equal */
[ID], [Nr], [D], 
/* inequal */
[S], [OD])
INCLUDE 
([A], [C] )
Run Code Online (Sandbox Code Playgroud)

SCRIPT => CREATE SCRIPT在 SSMS 中选择后,所有评论都消失了。

有没有人知道让他们活着的解决方案?

Han*_*non 8

没有办法在索引的定义中存储文本。

您可以使用扩展属性来存储描述性信息,但是当您“编写”对象脚本时它不会自动显示。

USE tempdb;

CREATE TABLE dbo.t1
(
    ID INT NOT NULL
);

CREATE INDEX IX_t1
ON dbo.t1(ID);

/*
    This will add a comment named "Comments" to the IX_t1 index
*/
EXEC sys.sp_addextendedproperty @name=N'Comments'
    , @value=N'This is a test index to store comments'
    , @level0type = N'SCHEMA'
    , @level0name = N'dbo'
    , @level1type = N'TABLE'
    , @level1name = N't1'
    , @level2type = N'INDEX'
    , @level2name = N'IX_t1';

/*
    This displays all comments associated with indices in the current database
*/
SELECT SchemaName = s.name
    , ObjectName = o.name
    , IndexName = i.name
    , PropertyName = xp.name
    , PropertyValue = xp.value
FROM sys.schemas s
    INNER JOIN sys.objects o ON s.schema_id = o.schema_id
    LEFT JOIN sys.indexes i ON o.object_id = i.object_id
CROSS APPLY sys.fn_listextendedproperty(NULL, N'SCHEMA', s.name, N'TABLE',
    o.name, CASE WHEN i.name IS NULL THEN NULL ELSE N'INDEX' END, i.name) xp
ORDER BY s.name
    , o.name
    , xp.name;
Run Code Online (Sandbox Code Playgroud)

以上查询结果:

在此处输入图片说明

/*
    This provides the ability to delete Extended Properties
*/
EXEC sys.sp_dropextendedproperty @name = N'Comments'
    , @level0type = N'SCHEMA'
    , @level0name = N'dbo'
    , @level1type = N'TABLE'
    , @level1name = N't1'
    , @level2type = N'INDEX'
    , @level2name = N'IX_t1';


/*
    Clean up my test bed
*/
DROP TABLE dbo.t1;
Run Code Online (Sandbox Code Playgroud)

此问题的最佳实践解决方案是将对象定义存储在版本控制系统中。

  • ...或者至少是某种数据文档(源代码控制在许多数据库团队中似乎是一个陌生的概念)。 (5认同)