7

私は、SQL サーバーと mysql の 2 つのデータベース間で同じテーブルのスキーマを視覚的に比較する必要があるページに取り組んでいます。インデックスも含める必要があります。

現在、mysql クエリはインデックスとともに情報を表示します -

select column_name,column_type,table_name,column_key 
  from INFORMATION_SCHEMA.COLUMNS where table_name = 'tbl_ClientDN'

しかし、SQLサーバーの場合、同じクエリはインデックスを返しません-

 select * from INFORMATION_SCHEMA.COLUMNS where table_name = 'tbl_ClientDN'

だから私はの結果を組み合わせるためにクエリが必要です -

 sp_helpindex 'tbl_ClientDN'

mssql クエリでインデックスを示す column_key を取得する方法。なにか提案を ?

4

2 に答える 2

9

INFORMATION_SCHEMA.COLUMNSフィルタリングされたインデックスや含まれる列などは定義の一部ではないため、特にインデックスの場合は避けてください。これについては、ここで詳しく説明します。

sys.indexesこれにはandを使用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;

一度にすべてのテーブルに対してこれを行う場合は、簡単な変更を行います。

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;

詳細については、トピックsys.indexesおよびsys.index_columnsを参照してください。

Kimberley L. Tripp のsp_helpindex2も参照してください。


編集

一般的に、@BrianWhite のコメントに同意します。これに何らかの労力を費やしている場合は、車輪を再発明して自分で記述しようとするのではなく、ツールを使用する必要があります。おそらく、この 1 つのクエリのトラブルシューティングに、時間に関しては、優れたツールのコストが既に費やされています。この投稿を読んでください:

于 2012-04-30T15:45:28.067 に答える
0

おそらくあなたは後ですsp_help

http://msdn.microsoft.com/en-us/library/ms187335.aspx

単純に入力する

sp_help myTableName

必要なすべてのデータを提供する必要があります。

于 2012-04-30T15:32:03.383 に答える