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 into @constraintToRename 语句,所以我可以将@constraintToRename 重命名为“myName”,如果它存在并且还没有名称“myName”,或者如果它不存在则只创建一个新名称。我将提供有关该列和“myName”的信息,例如:

select index_name into @toRename from 'some_index_table' join 'some_other_index_table' where '索引仅在我现在输入的列上指定,因此不会返回多个列索引等等'

就我而言,我想在 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 回答