Как получить имя индекса, ключ и описание из таблицы 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';