2009年10月3日土曜日

groovyとSQL Serverでインデックスの張られたカラムの情報を表示する

groovyとSQL Serverでインデックスの張られたカラムの情報を表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

table = "test"
query = "select\
indexes.name as index_name,\
index_columns.index_id,\
index_columns.index_column_id,\
columns.name \
from\
sys.tables\
join sys.columns\
on (tables.object_id = columns.object_id)\
join sys.indexes\
on (tables.object_id = indexes.object_id)\
join sys.index_columns\
on (tables.object_id = index_columns.object_id\
and indexes.index_id = index_columns.index_id\
and columns.column_id = index_columns.column_id) \
where\
tables.name = ${table} \
order by indexes.index_id, index_columns.index_column_id"

sql.eachRow(query){
// インデックス名
println "index_name:${it.index_name}"
// インデックスID
println "index_id:${it.index_id}"
// インデックスカラムID
println "index_column_id:${it.index_column_id}"
// カラム名
println "name:${it.name}"
println "----"
}


テスト用テーブル作成スクリプト

create table test
(
test_id numeric(4) ,
test_cycle numeric(4),
test_name varchar(20),
primary key (test_id, test_cycle)
)
go
create unique index uk_table_name on test (test_name)
go


実行結果

index_name:PK__test__9B8FEA040AD2A005
index_id:1
index_column_id:1
name:test_id
----
index_name:PK__test__9B8FEA040AD2A005
index_id:1
index_column_id:2
name:test_cycle
----
index_name:uk_table_name
index_id:2
index_column_id:1
name:test_name
----


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

参考情報
sys.index_columns
http://msdn.microsoft.com/ja-jp/library/ms175105.aspx

0 件のコメント:

コメントを投稿