Как получить имя индекса, ключ и описание из таблицы sybase

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

"sp_helpindexes" дает все эти детали с некоторыми нежелательными строками, но мне нужен альтернативный способ получить только имя индекса, ключ и описание.

Кто-нибудь, пожалуйста, помогите мне в этом....?

3 ответа

Решение

Заказной SQL-запрос

Вы можете найти описание sp_helpindex с помощью команды sp_helptext следующим образом:

use sybsystemprocs
go

sp_helptext sp_helpindex
go

Это даст вам определение вашего хранимого prcedure. Затем вы можете извлечь необходимый запрос SQL (который может быть хитрым, другой store_proc).

Сценарий оболочки для обработки вывода sp_helpindex

С другой стороны, кажется, что это просто проблема оболочки, когда вы можете вызвать свой SQL-сервер. Например, используя программу sqsh (программу, похожую на isql), вы можете получить файл myindexes.sql, содержащий:

use databaname
go
sp_helpindex tablename
go

Тогда команда

sqsh -U username -P password -S SYBASESERVER -i myindexes.sql -h > myindexes.txt

даст вам вывод sp_helpindex, который вы можете обработать. Используя вывод sqsh, строка 3 содержит имя индекса и ключи, строка 4 - описание. Я использую:

#!/bin/bash

# Call sqh command : output in myindex.txt
sqsh -U username -P password -S SYBASESERVER -i myindexes.sql -h > myindex.txt

# Then process the output
INAME=`sed '3!d' myindex.txt | tr -s ' ' | cut -d ' ' -f 2`
IKEYS=`sed '3!d' myindex.txt | tr -s ' ' | cut -d ' ' -f 3`
IDESC=`sed '4!d' myindex.txt | tr -s ' ' | cut -f 2`

# print out the values
echo "$INAME $IKEYS $IDESC"

# Clean up the files
rm myindex.txt

Надеюсь, это немного поможет.

Получить имя индекса из таблицы sysindexes
выберите name,indid,keycnt из sysindexes, где id=object_id("имя_таблицы")
и затем используйте index_col(table_name,indexid,keycnt-1), чтобы найти ключи.

надеюсь, это поможет

Спасибо,
Гопал

В версии Sybase SAP IQ/16 вы можете получить список индексов со следующим (имя таблицы my_table чувствительно к регистру):

select *
from sys.sysindexes
where tname = 'my_table';
Другие вопросы по тегам