我想检查条件,如果表中存在的索引然后触发存储过程,否则必须继续其他条件。
示例:
IF EXISTS (SELECT name FROM sys.indexes WHERE object_id = OBJECT_ID(@TableName)
BEGIN
execute spTest1
END
ELSE
BEGIN
execute spTest2
END
注意:在上面的脚本中,@TableName
将以单引号的格式动态传递,例如'tableName'
。
答案 0 :(得分:1)
SQL没有任何问题,除了EXISTS
行末尾没有关闭括号:
IF EXISTS (SELECT name FROM sys.indexes WHERE object_id = OBJECT_ID(@TableName))
BEGIN
execute spTest1
END
ELSE
BEGIN
execute spTest2
END
这将有效,但您可能总是找到索引而不以某种方式过滤数据。您可能希望更具体地了解要搜索的索引类型,因为SQL将创建一些默认索引。例如,如果使用主键创建表,则将为您创建聚簇索引。
如果没有添加主键,您通常会有 HEAP 类型索引,因此这可能是您要过滤的索引类型。
如果针对目标数据库运行此命令,您将看到存在的索引:
select st.name, st.object_id, si.name, si. index_id, si.type, si.type_desc
from sys.tables st
inner join sys.indexes si on si.object_id = st.object_id
为了过滤HEAP
索引,您可以排除可以按sys.indexes.index_id
过滤的群集/非群集索引:
index_id = 0
index_id = 1
index_id = 2