Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 11.9 :Как определить столбы таблицы входящие в индекс / 12 сообщений из 12, страница 1 из 1
01.03.2006, 14:38
    #33573890
Змей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 11.9 :Как определить столбы таблицы входящие в индекс
Есть следующая проблема...

Есть есть таблица, у нее есть уникальный индекс, как получить список полей таблицы входящие в индекс?

Про index_col(..) знаю... но не устраивает, что нельзя через переменную подставить имя таблицы...
...
Рейтинг: 0 / 0
01.03.2006, 14:54
    #33573987
Змей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 11.9 :Как определить столбы таблицы входящие в индекс
Ппосмотрел.. Но в key1 какой-то шестнадцатеричный код.. и что сним делать?
...
Рейтинг: 0 / 0
01.03.2006, 14:55
    #33573995
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 11.9 :Как определить столбы таблицы входящие в индекс
Ой, ерунду конечно написал в предыдущем посте.

В sp_helpindex это делается через тот же index_col

Код: plaintext
1.
2.
3.
4.
...
/*select @keys = @keys + index_col(@objname, @indid, @i)*/
select @keys = @keys + @thiskey
...
...
Рейтинг: 0 / 0
01.03.2006, 15:03
    #33574048
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 11.9 :Как определить столбы таблицы входящие в индекс
Что-то я не понимаю, почему там у вас через переменную не подставить имя таблицы :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
[ 1017 ] CORE. 1 > declare @oname varchar( 30 ) select @oname = 'GRP' select index_col(@oname,  1 ,  1 );
( 1  row affected)
|
|----------------------------------------------------------------------------------------------
|grp_id

( 1  row affected)

Может конечно это 11.9 так вас ограничивает....
Ну посмотрите sp_helptext sp_helpindex , как они там тогда достают имена колонок.
...
Рейтинг: 0 / 0
01.03.2006, 15:06
    #33574075
Змей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 11.9 :Как определить столбы таблицы входящие в индекс
2 MasterZiv
Спасибо!


Чего-то у меня тут глючит:) делаю Check syntax говорит unexpected token @tname на select index_col(@tname,@indid,@keycnt), @id
А выполнять - выполняет...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
create table #tindex
(
 colname varchar( 255 ),
 idtable int
)

declare
 @keycnt int
 ,@id int
 ,@indid int
 ,@tname varchar( 255 )
 
select @tname='_test', @indid =  1 

select
 @keycnt = keycnt,
 @id=so.id
from sysindexes si, sysobjects so
where
 si.id = so.id 
 and so.name = @tname
 and si.indid = @indid

while @keycnt >  0 
    begin
        insert into #tindex(colname,idtable)
        select index_col(@tname,@indid,@keycnt), @id
        select @keycnt = @keycnt -  1 
    end
select * from #tindex
drop table #tindex
...
Рейтинг: 0 / 0
01.03.2006, 16:09
    #33574440
Peter Kirillow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 11.9 :Как определить столбы таблицы входящие в индекс
а так не проще ?

select
object_name(si.id) + "." + si.name As IndexName,
index_col(object_name(si.id),si.indid,v.number) As ColumnName
from
sysindexes si , syscolumns sc , master..spt_values v
where
si.id = object_id('TableName')
-- and si.status & 2 = 2 (можно добавить, чтобы выводить только по уникальным ключам)
and si.id = sc.id
and v.type = "P"
and v.number >= 1
and v.number = sc.colid
and index_col(object_name(si.id),si.indid,v.number) is not null
order by si.id, si.indid, v.number
...
Рейтинг: 0 / 0
01.03.2006, 17:22
    #33574747
Змей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 11.9 :Как определить столбы таблицы входящие в индекс
Peter Kirillowа так не проще ?

select
object_name(si.id) + "." + si.name As IndexName,
index_col(object_name(si.id),si.indid,v.number) As ColumnName
from
sysindexes si , syscolumns sc , master..spt_values v
where
si.id = object_id('TableName')
-- and si.status & 2 = 2 (можно добавить, чтобы выводить только по уникальным ключам)
and si.id = sc.id
and v.type = "P"
and v.number >= 1
and v.number = sc.colid
and index_col(object_name(si.id),si.indid,v.number) is not null
order by si.id, si.indid, v.number

тоже вариант, конечно....

А где описание master..spt_values можно найти? я в хелпе покопался - предлагают копать системные процедуры...

З.Ы.
Для меня несколько странно, как в Sybase все это реализовано в сравнении с MSSQL... но это так мысли вслух...
...
Рейтинг: 0 / 0
01.03.2006, 18:04
    #33574933
Peter Kirillow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 11.9 :Как определить столбы таблицы входящие в индекс
да нигде его и нету этого описания.
так - с миру по нитке...
...
Рейтинг: 0 / 0
01.03.2006, 19:36
    #33575144
Zhora
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 11.9 :Как определить столбы таблицы входящие в индекс
Тут немного. http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sag/@Generic__BookView?DwebQuery=spt_values
Ее еще часто используют чтобы цикл не писать.
...
Рейтинг: 0 / 0
01.03.2006, 23:31
    #33575385
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 11.9 :Как определить столбы таблицы входящие в индекс
Peter Kirillowа так не проще ?

select

si.id = object_id('TableName')
-- and si.status & 2 = 2 (можно добавить, чтобы выводить только по уникальным ключам)
and index_col(object_name(si.id),si.indid,v.number) is not null
order by si.id, si.indid, v.number

Добрый запрос !! В лучших традициях !!
...
Рейтинг: 0 / 0
17.04.2006, 17:39
    #33671863
Змей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 11.9 :Как определить столбы таблицы входящие в индекс
Peter Kirillowда нигде его и нету этого описания.
так - с миру по нитке...

в продолжении темы.. вот еще немного об индексах и таблице spt_values ...
взято отсюда

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
/* SP sp_help_db_indexes: 
enumerates all the indexes of all the DB's tables 
Author : Giuseppe Dimauro
 */

CREATE procedure sp_help_db_indexes
AS

declare @empty varchar( 1 )
select @empty = ''

-- 35 is the lenght of the name field of the master.dbo.spt_values table
declare @IgnoreDuplicateKeys varchar( 35 ),
    @Unique varchar( 35 ),
    @IgnoreDuplicateRows varchar( 35 ),
    @Clustered varchar( 35 ),
    @Hypotethical varchar( 35 ),
    @Statistics varchar( 35 ),
    @PrimaryKey varchar( 35 ),
    @UniqueKey varchar( 35 ),
    @AutoCreate varchar( 35 ),
    @StatsNoRecompute varchar( 35 )

select @IgnoreDuplicateKeys = name from master.dbo.spt_values 
    where type = 'I' and number =  1  --ignore duplicate keys
select @Unique = name from master.dbo.spt_values 
    where type = 'I' and number =  2  --unique
select @IgnoreDuplicateRows = name from master.dbo.spt_values 
    where type = 'I' and number =  4  --ignore duplicate rows
select @Clustered = name from master.dbo.spt_values 
    where type = 'I' and number =  16  --clustered
select @Hypotethical = name from master.dbo.spt_values 
    where type = 'I' and number =  32  --hypotethical
select @Statistics = name from master.dbo.spt_values 
    where type = 'I' and number =  64  --statistics
select @PrimaryKey = name from master.dbo.spt_values 
    where type = 'I' and number =  2048  --primary key
select @UniqueKey = name from master.dbo.spt_values 
    where type = 'I' and number =  4096  --unique key
select @AutoCreate = name from master.dbo.spt_values 
    where type = 'I' and number =  8388608  --auto create
select @StatsNoRecompute = name from master.dbo.spt_values 
    where type = 'I' and number =  16777216  --stats no recompute
select o.name,
  i.name,
  'index description' = convert(varchar( 210 ), --bits 16 off, 1, 2, 16777216 on
      case when (i.status &  16 )<> 0  then @Clustered else 'non'+@Clustered end
      + case when (i.status &  1 )<> 0  then ', '+@IgnoreDuplicateKeys else @empty end
      + case when (i.status &  2 )<> 0  then ', '+@Unique else @empty end
      + case when (i.status &  4 )<> 0  then ', '+@IgnoreDuplicateRows else @empty end
      + case when (i.status &  64 )<> 0  then ', '+@Statistics else
      case when (i.status &  32 )<> 0  then ', '+@Hypotethical else @empty end end
      + case when (i.status &  2048 )<> 0  then ', '+@PrimaryKey else @empty end
      + case when (i.status &  4096 )<> 0  then ', '+@UniqueKey else @empty end
      + case when (i.status &  8388608 )<> 0  then ', '+@AutoCreate else @empty end
      + case when (i.status &  16777216 )<> 0  then ', '+@StatsNoRecompute else @empty end),
  'index column 1' = index_col(o.name,indid,  1 ),
  'index column 2' = index_col(o.name,indid,  2 ),
  'index column 3' = index_col(o.name,indid,  3 )
from sysindexes i, sysobjects o
where i.id = o.id and
      indid >  0  and indid <  255  --all the clustered (=1), non clusterd (>1 and <251), and text or image (=255) 
      and o.type = 'U' --user table
      --ignore the indexes for the autostat
      and (i.status &  64 ) =  0  --index with duplicates
      and (i.status &  8388608 ) =  0  --auto created index
      and (i.status &  16777216 )=  0  --stats no recompute
      order by o.name
...
Рейтинг: 0 / 0
17.04.2006, 17:45
    #33671880
Змей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 11.9 :Как определить столбы таблицы входящие в индекс
Что характерно это работает и на MSSQL и на Sybase
....
ну и если помотреть на INFORMATION_SCHEMA.KEY_COLUMN_USAGE в mssql и вспомнить что sybase работал с MS когда-то вместе то более менее все проясняется....
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 11.9 :Как определить столбы таблицы входящие в индекс / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]