0

そのような制約が存在しない場合にのみ、列にfkまたはインデックスを入力したいと思います。存在し、名前が希望する名前でない場合は、名前を変更するだけです。それ以外の場合は何もしません。この目的のために、SQLサーバーのsysテーブルまたはOracleのall_...テーブルをチェックしています。

これが私の問題を可能な限り単純化したものです:

index_name              column_name
on_multiple_columns1    a
on_multiple_columns1    b

on_multiple_columns2    a
on_multiple_columns2    b
on_multiple_columns2    c

on_single_column1       b

on_single_column2       c

ここで、select index_nameを@constraintToRenameステートメントに入れる必要があるので、@constraintToRenameが存在してまだ「myName」という名前がない場合は「myName」に名前を変更できます。存在しない場合は新しい名前を作成できます。コラムと「myName」に関する情報をお届けします。例:

select index_name into @toRename from'some_index_table' join'some_other_index_table'ここで、'インデックスは、現在入力している列でのみ指定されているため、複数の列のインデックスは返されません。

私の場合、列bにmyName=testを指定してインデックスを入力します。列bの名前を選択すると、3つのインデックス(on_multiple_columns1、on_multiple_columns2、および右側のon_single_column1)が取得されますが、必要なのはon_single_column1だけなので、名前を変更してテストできます。どうすればこれを選択できますか?何かのようなもの

select ... where column = 'my_column' and count(index_names) = 1

また

select .... where column = 'my_column' and index_name !corresponds to other columns :)

これをSQLで表現するにはどうすればよいですか?ありがとうsss

4

1 に答える 1

0

上記のコメントの提案に触発されて、私は今これを使用しています:

select index_name from <table> where column_name='b' and index_name in 
(select index_name from <table> group by index_name having COUNT(index_name) = 1)

これは私にとってはうまくいきました、ありがとう

于 2012-08-03T10:39:08.213 に答える