Есть ли запрос на индексы?

Я хочу знать, каковы индексы таблицы. Я использую ASE ISQL, и я могу узнать индексы, щелкнув правой кнопкой мыши по таблице и выбрав DDL, однако на другой машине есть разработчик, который не знаком с sybase, и я хочу знать индексы его базы данных (он использует АСЭ).

Есть ли запрос для этого?


person Moudiz    schedule 22.05.2013    source источник


Ответы (2)


Существует несколько различных способов просмотра индексов в вашей базе данных.

sp_helpindex можно использовать для отображения индексов, связанных с конкретной таблицей.

sp_helpindex TABLE_NAME

sp_help можно использовать для перечисления всех свойств таблицы, включая связанные индексы.

sp_help TABLE_NAME

Чтобы получить список всех индексов и связанных с ними таблиц, вы можете использовать следующий запрос

use DATABASE_NAME
go

select sysobjects.name as TABLE_NAME, sysindexes.name as INDEX_NAME
from sysobjects,sysindexes where
sysobjects.type = 'U' and
sysobjects.id = sysindexes.id and
sysindexes.indid between 1 and 254
order by sysobjects.name,sysindexes.indid
go
person Community    schedule 22.05.2013
comment
большое спасибо, я не могу проголосовать за вас из-за моей низкой репутации, но вы искренне помогаете мне - person Moudiz; 22.05.2013

Этот код будет генерировать индексы кода:

use [database]
go
declare @objectName sysname
declare @username sysname
declare @fullname sysname
declare @id int

select
  @id = o.id,
  @objectName = o.name,
  @username = u.name,
  @fullname =  u.name + '.' + o.name
from
  dbo.sysobjects o,
  dbo.sysusers u
where
  o.name = 'Table'
  and o.Type in ( 'U', 'S' )
  and u.uid = o.uid
  and u.name = 'Owner'

select
  [index] = 1000 * i.indid,
  text =
    'create' +
    case i.status & 2
      when 2 then ' unique '
      else ' '
    end +
    case ( i.status & 16 ) + ( i.status2 & 512 )
      when 0 then
        'nonclustered'
      else
        'clustered'
    end +
    ' index [' + i.name + '] on ' + @fullname + ' ('
from
  dbo.sysindexes i
where
  i.indid > 0
  and i.indid < 255
  and i.id = @id
  and i.status2 & 2 != 2

union all

select
  [index] = 1000 * i.indid + c.colid,
  text =
    ' ' + index_col ( @fullname, i.indid, c.colid ) +
  case
    when c.colid < i.keycnt - case when i.indid = 1 then 0 else 1 end then
      ', '
  end
from
  dbo.sysindexes i,
  dbo.syscolumns c
where
  i.indid > 0
  and i.indid < 255
  and i.id = @id
  and i.status2 & 2 != 2

  and c.id = @id
  and c.colid <= i.keycnt - case when i.indid = 1 then 0 else 1 end

union all

select
  [index] = 1000 * i.indid + 999,
  text =
    ' )' || char ( 13 ) || char ( 10 ) || 'go' || char ( 13 ) || char ( 10 )
from
  dbo.sysindexes i
where
  i.indid > 0
  and i.indid < 255
  and i.id = @id
  and i.status2 & 2 != 2

order by
  [index]
go
person zluis0    schedule 28.08.2013