Usuário com melhor resposta
Identificar todos os indices

Pergunta
-
Pessoal
Qual seria a melhor maneira de identificar todos os indices menos as primary, de um banco de dados qualquer, em sql server 2000 ?
select tb_sys_idx.name as nm_Indice ,tb_sys_tab.name as nm_Tabela ,tb_sys_col.name as nm_Coluna ,substring(tb_sys_idx.name,1,2) as pk_key from nucleu_base.dbo.sysobjects tb_sys_tab inner join nucleu_base.dbo.sysindexes tb_sys_idx on tb_sys_tab.id = tb_sys_idx.id inner join nucleu_base.dbo.sysindexkeys tb_sys_idx_col on tb_sys_idx.id = tb_sys_idx_col.id and tb_sys_idx.indid = tb_sys_idx_col.indid inner join nucleu_base.dbo.syscolumns tb_sys_col on tb_sys_idx.id = tb_sys_col.id and tb_sys_idx_col.colid = tb_sys_col.colid where tb_sys_tab.xtype = 'U' and tb_sys_idx.indid between 1 and 254 and substring(tb_sys_idx.name,1,3) <> 'pk_'
Respostas
-
Neibala,
Você vai precisar indicar o banco de dados no início do script, pois estas tabelas de sistema apenas irão apontar objetos referentes a cada banco de dados. Segue o script alterado:
USE SeuBanco GO select tb_sys_idx.name as nm_Indice ,tb_sys_tab.name as nm_Tabela ,tb_sys_col.name as nm_Coluna ,substring(tb_sys_idx.name,1,2) as pk_key, * from dbo.sysobjects tb_sys_tab inner join dbo.sysindexes tb_sys_idx on tb_sys_tab.id = tb_sys_idx.id inner join dbo.sysindexkeys tb_sys_idx_col on tb_sys_idx.id = tb_sys_idx_col.id and tb_sys_idx.indid = tb_sys_idx_col.indid inner join dbo.syscolumns tb_sys_col on tb_sys_idx.id = tb_sys_col.id and tb_sys_idx_col.colid = tb_sys_col.colid where tb_sys_tab.xtype = 'U' and tb_sys_idx.indid between 1 and 254 and objectproperty(object_id(tb_sys_idx.name),'IsPrimaryKey') is null GO
Para maiores informações veja:
http://msdn.microsoft.com/pt-br/library/ms190324.aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Ricardo Barbosa Cortes quarta-feira, 10 de setembro de 2014 11:02
- Marcado como Resposta Ricardo Barbosa Cortes quarta-feira, 10 de setembro de 2014 20:06
Todas as Respostas
-
Pessoal
Pesquisando um pouco mais com calma, acabei fazendo o código abaixo, só que estou acessando outra base, existiria alguma maneira de utilizar a função objectproperty, object_id utilizando banco e dbo, para ele saber qual é o banco correto ?
select tb_sys_idx.name as nm_Indice ,tb_sys_tab.name as nm_Tabela ,tb_sys_col.name as nm_Coluna ,substring(tb_sys_idx.name,1,2) as pk_key from nucleu_base.dbo.sysobjects tb_sys_tab inner join nucleu_base.dbo.sysindexes tb_sys_idx on tb_sys_tab.id = tb_sys_idx.id inner join nucleu_base.dbo.sysindexkeys tb_sys_idx_col on tb_sys_idx.id = tb_sys_idx_col.id and tb_sys_idx.indid = tb_sys_idx_col.indid inner join nucleu_base.dbo.syscolumns tb_sys_col on tb_sys_idx.id = tb_sys_col.id and tb_sys_idx_col.colid = tb_sys_col.colid where tb_sys_tab.xtype = 'U' and tb_sys_idx.indid between 1 and 254 and objectproperty(object_id(tb_sys_idx.name),'IsPrimaryKey') is null
-
Neibala,
Você vai precisar indicar o banco de dados no início do script, pois estas tabelas de sistema apenas irão apontar objetos referentes a cada banco de dados. Segue o script alterado:
USE SeuBanco GO select tb_sys_idx.name as nm_Indice ,tb_sys_tab.name as nm_Tabela ,tb_sys_col.name as nm_Coluna ,substring(tb_sys_idx.name,1,2) as pk_key, * from dbo.sysobjects tb_sys_tab inner join dbo.sysindexes tb_sys_idx on tb_sys_tab.id = tb_sys_idx.id inner join dbo.sysindexkeys tb_sys_idx_col on tb_sys_idx.id = tb_sys_idx_col.id and tb_sys_idx.indid = tb_sys_idx_col.indid inner join dbo.syscolumns tb_sys_col on tb_sys_idx.id = tb_sys_col.id and tb_sys_idx_col.colid = tb_sys_col.colid where tb_sys_tab.xtype = 'U' and tb_sys_idx.indid between 1 and 254 and objectproperty(object_id(tb_sys_idx.name),'IsPrimaryKey') is null GO
Para maiores informações veja:
http://msdn.microsoft.com/pt-br/library/ms190324.aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Ricardo Barbosa Cortes quarta-feira, 10 de setembro de 2014 11:02
- Marcado como Resposta Ricardo Barbosa Cortes quarta-feira, 10 de setembro de 2014 20:06