我想在列上输入fk或索引,只有在这样的约束不存在的情况下。如果它存在,并且名称不是我想要的名称,只需重命名,否则什么也不做。为此,我正在检查SQL服务器的sys表或Oracle的所有_...表。
这是我的问题尽可能简化:
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
现在我需要在@constraintToRename语句中选择一个index_name,所以我可以将@constraintToRename重命名为'myName'(如果它已存在)并且还没有名称'myName',或者只是创建一个新的名字'myName'。 我将收到有关该列和'myName'的信息 E.g:
从'some_index_table'加入'some_other_index_table'中选择index_name到@toRename 其中'索引仅在我现在输入的列上指定,因此不返回多列索引等等'
在我的情况下,我想在列b上输入myName = test的索引。当我只选择列b的名称时,我会得到3个索引(on_multiple_columns1,on_multiple_columns2和右边的on_single_column1),但我只需要on_single_column1,所以我可以将其重命名为test。 我该如何选择? 像
这样的东西select ... where column = 'my_column' and count(index_names) = 1
或
select .... where column = 'my_column' and index_name !corresponds to other columns :)
如何在SQL中表达这一点? 谢谢 SSS
答案 0 :(得分: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)
这对我来说很好,谢谢