san*_*ana 7 mysql sql database sql-server
我正在开发一个页面,我们需要在两个数据库中可视地比较同一个表的模式 - 一个在sql server中,另一个在mysql中.我也必须包含索引.
现在mysql查询显示信息和索引 -
select column_name,column_type,table_name,column_key
from INFORMATION_SCHEMA.COLUMNS where table_name = 'tbl_ClientDN'
Run Code Online (Sandbox Code Playgroud)
但对于sql server,相同的查询不会返回索引 -
select * from INFORMATION_SCHEMA.COLUMNS where table_name = 'tbl_ClientDN'
Run Code Online (Sandbox Code Playgroud)
所以我需要查询来计算结果 -
sp_helpindex 'tbl_ClientDN'
Run Code Online (Sandbox Code Playgroud)
如何让column_key在mssql查询中显示索引.有什么建议吗?
远离INFORMATION_SCHEMA.COLUMNS,尤其是索引,因为过滤索引和包含列之类的东西不是定义的一部分.我在这里更详细地讨论这个问题:
你想使用sys.indexes和sys.index_columns为此.例如:
DECLARE @tablename NVARCHAR(512) = 'dbo.tbl_ClientDN';
SELECT
[Index] = i.name,
[Column] = c.Name,
[Type] = i.type_desc,
PK = i.is_primary_key,
[Unique] = i.is_unique,
[Unique Constraint] = i.is_unique_constraint,
[DESC] = ic.is_descending_key,
[INCLUDE] = ic.is_included_column,
[Filtered] = i.filter_definition -- only for SQL Server 2008+
FROM
sys.indexes AS i
INNER JOIN
sys.index_columns AS 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.[object_id] = OBJECT_ID(@tablename)
ORDER BY [Index], ic.index_column_id;
Run Code Online (Sandbox Code Playgroud)
如果要一次对所有表执行此操作,那么只需进行简单的更改:
SELECT
[Table] = QUOTENAME(OBJECT_SCHEMA_NAME(i.[object_id]))
+ '.' + QUOTENAME(OBJECT_NAME(i.[object_id])),
[Index] = i.name,
[Column] = c.Name,
[Type] = i.type_desc,
PK = i.is_primary_key,
[Unique] = i.is_unique,
[Unique Constraint] = i.is_unique_constraint,
[DESC] = ic.is_descending_key,
[INCLUDE] = ic.is_included_column,
[Filtered] = i.filter_definition -- only for SQL Server 2008+
FROM
sys.indexes AS i
INNER JOIN
sys.index_columns AS 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]
ORDER BY [Table], [Index], ic.index_column_id;
Run Code Online (Sandbox Code Playgroud)
您没有指定您正在使用的SQL Server版本,因此以下是有关sys.indexes和的主题的所有链接sys.index_columns:
SYS.INDEXES
SQL Server 2005 http://technet.microsoft.com/en-us/library/ms173760%28SQL.90%29.aspx
SQL Server 2008 http://technet.microsoft.com/en-us/library/ms173760%28SQL .100%29.aspx
SQL Server 2008 R2 http://technet.microsoft.com/en-us/library/ms173760%28SQL.105%29.aspx
SQL Server 2012 http://technet.microsoft.com/en-我们/库/ ms173760%28SQL.110%29.aspx
sys.index_columns
SQL Server 2005 http://technet.microsoft.com/en-us/library/ms175105%28SQL.90%29.aspx
SQL Server 2008 http://technet.microsoft.com/en-us/library/ms175105%28SQL .100%29.aspx
SQL Server 2008 R2 http://technet.microsoft.com/en-us/library/ms175105%28SQL.105%29.aspx
SQL Server 2012 http://technet.microsoft.com/en-我们/库/ ms175105%28SQL.110%29.aspx
您还可以查看一下Kimberley L. Tripp的sp_helpindex2.
编辑
总的来说,我同意@ BrianWhite的评论.如果您正在为此付出任何努力,那么您应该使用一个工具来代替重新发明轮子并尝试自己编写.对这个问题进行疑难解答,就时间而言,您可能已经花费了一个好工具的成本.请阅读这篇文章:
http://bertrandaaron.wordpress.com/2012/04/20/re-blog-the-cost-of-reinventing-the-wheel/