Sql server 包含索引的命名标准?
我们对索引使用了一个相当简单的命名标准,我可以通过编程方式进行验证,但我很难用INCLUDE列来命名索引。如果我根据一个简单的公式来做,那么很容易构建太长的名称。然后,我的编程验证失败,最后我的名字被截断了 对于那些使用INCLUDE列的用户,您是否提出了自己满意的命名标准?如果是,请分享 我目前不满意的标准是:Sql server 包含索引的命名标准?,sql-server,naming-conventions,standards,indexing,Sql Server,Naming Conventions,Standards,Indexing,我们对索引使用了一个相当简单的命名标准,我可以通过编程方式进行验证,但我很难用INCLUDE列来命名索引。如果我根据一个简单的公式来做,那么很容易构建太长的名称。然后,我的编程验证失败,最后我的名字被截断了 对于那些使用INCLUDE列的用户,您是否提出了自己满意的命名标准?如果是,请分享 我目前不满意的标准是: IX_uuuuuuuuuuuuuuuuuuuuwincl(wIncl翻译为“包含”) 问题是没有关于包含哪些列的指示。我不会真的将所有这些信息添加到索引名中 我通常吃的是 主键索引的
IX_uuuuuuuuuuuuuuuuuuuuwincl
(wIncl
翻译为“包含”)
问题是没有关于包含哪些列的指示。我不会真的将所有这些信息添加到索引名中 我通常吃的是
- 主键索引的主键(表)
用于常规非聚集索引IXnn(表)\uxname(索引名)
用于常规非聚集唯一索引UIXnn_uxnn(表)xnn(索引名)
用于聚集唯一索引(如果与主键不同)CIXnn_u1;(表)1;(索引名)
SELECT
OBJECT_NAME(i.object_id) 'Table name',
i.name 'Index name',
i.type_desc 'Index type',
i.is_unique ,
i.is_primary_key ,
i.is_unique_constraint ,
c.Name 'Column name',
ic.is_included_column
FROM
sys.indexes i
INNER JOIN
sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN
sys.columns c ON ic.column_id = c.column_id AND ic.object_id = c.object_id
WHERE
i.Name = '(your index name in question)'
Marc如果您确实想在索引名中包含列名,只需使用相同的列命名结构即可:
IX_<table>_<col1>..._...<colN>_INCL_<col1>..._...<colN>
IX_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。。。
如果这太长,那么对于包含的列,可以使用序号而不是名称。(或者,您可以调查为什么包含的列太多,超过了标识符长度,或者列命名标准是否过于冗长)
但是,您总是可以从目录视图中获取包含的列,因此我不确定您为什么希望仅在名称中如此明确。我不记得有过这样一种情况:我总是绝对希望通过单独查看名称来了解索引的所有可能细节。对于包含的列,我认为在“需要知道”的情况下手动查找它们是可以的