如果你已经登录了 test 数据库为用户 foo , create index 命令将被应用于 foo.test_table table(优先级赋予您拥有的对象)。
test
foo
create index
foo.test_table
如果你已经登录了 test 数据库,除了 foo ,并假设您有权创建索引, create index 命令将被应用于 dbo.test_table table(优先级由对象传递给对象 dbo 如果您不拥有给定名称的对象 的 和 强> 你没有提供明确的所有者)。
dbo.test_table
dbo
如果您知道您将拥有多个具有相同名称但拥有不同所有者的表,那么养成提供明确所有者名称的习惯会更加“干净”(并且您不太可能发出命令来反对'错了'表'。
至于如何检查索引的存在......简而言之:
sysusers
sysobjects
sysindexes
syscolumns
示例连接(使用旧式连接子句):
select .... from sysusers u, sysobjects o, sysindexes i where u.name = '<user_name>' and o.name = '<table_name>' and o.type = 'T' -- T=table, P=procedure, V=view and i.name = '<index_name>' and o.uid = u.uid and o.id = i.id
加入来自 sysindexes.keys1/keys2 至 syscolumns.colid 因为你需要弄清楚你希望如何解析它,所以有点复杂 keys1/keys2 列获取个人 syscolumns.colid 值。
sysindexes.keys1/keys2
syscolumns.colid
keys1/keys2
再次,我建议你看一下代码 sp_helpindex 存储过程因为它引用所有适当的系统(aka目录)表,并包含必要的连接子句的示例:
sp_helpindex
exec sybsystemprocs..sp_helptext sp_helpindex,null,null,'showsql' go