我想从 Unix shell 脚本为特定表创建索引,因此我需要该特定表的索引名称、索引键和索引描述。
“sp_helpindexes”用一些不需要的行给出了所有这些细节,但我需要其他方法来只获取索引名称、键和描述。
有人请帮我解决这个问题......?
我想从 Unix shell 脚本为特定表创建索引,因此我需要该特定表的索引名称、索引键和索引描述。
“sp_helpindexes”用一些不需要的行给出了所有这些细节,但我需要其他方法来只获取索引名称、键和描述。
有人请帮我解决这个问题......?
从 sysindexes 表中获取索引名称
select name,indid,keycnt from sysindexes where 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)。
另一方面,它似乎只是一个shell问题,一旦你可以调用你的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';