そのような制約が存在しない場合にのみ、列に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