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 件のコメント:
コメントを投稿