【发布时间】:2012-08-02 18:41:44
【问题描述】:
我想在列上输入一个 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”的信息 例如:
选择 index_name 到 @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
【问题讨论】:
-
@Nikola Markovinović:问题在于,当我有 where column='my_column' 时,所有索引的 count(*) = 1。当我没有该列时='my_column',然后我只在一个列上指定所有 index_names -> 在这种情况下 on_single_column1 和 2,但我只想要与列 b 对应的那个 -> on_single_column1
标签: sql sql-server oracle indexing constraints