【发布时间】:2013-04-03 04:32:41
【问题描述】:
我想从 Unix shell 脚本为特定表创建索引,因此我需要该特定表的索引名称、索引键和索引描述。
"sp_helpindexes" 提供了所有这些详细信息以及一些不需要的行,但我需要其他方法来仅获取索引名称、键和描述。
有人请帮我解决这个......?
【问题讨论】:
标签: indexing backup sybase table-index
我想从 Unix shell 脚本为特定表创建索引,因此我需要该特定表的索引名称、索引键和索引描述。
"sp_helpindexes" 提供了所有这些详细信息以及一些不需要的行,但我需要其他方法来仅获取索引名称、键和描述。
有人请帮我解决这个......?
【问题讨论】:
标签: indexing backup sybase table-index
从 sysindexes 表中获取索引名称
从 sysindexes 中选择名称、indid、keycnt,其中 id=object_id("table_name")
然后使用 index_col(table_name,indexid,keycnt-1) 查找键。
希望这会有所帮助
谢谢,
戈帕尔
【讨论】:
您可以使用 sp_helptext 命令找到 sp_helpindex 的描述,如下所示:
use sybsystemprocs
go
sp_helptext sp_helpindex
go
这将为您提供存储过程的定义。然后你可以提取你需要的 SQL 请求(这可能很棘手,另一个 store_proc)。
另一方面,它似乎只是一个外壳问题,一旦你可以调用你的 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
希望这会有所帮助。
【讨论】:
在 Sybase 版本 SAP IQ/16 中,您可以获得以下索引列表(表名 my_table 区分大小写):
select *
from sys.sysindexes
where tname = 'my_table';
【讨论】: