0

我想从 Unix shell 脚本为特定表创建索引,因此我需要该特定表的索引名称、索引键和索引描述。

“sp_helpindexes”用一些不需要的行给出了所有这些细节,但我需要其他方法来只获取索引名称、键和描述。

有人请帮我解决这个问题......?

4

3 回答 3

1

从 sysindexes 表中获取索引名称
select name,indid,keycnt from sysindexes where id=object_id("table_name")
然后使用 index_col(table_name,indexid,keycnt-1) 查找键。

希望这会有所帮助

谢谢,
戈帕尔

于 2013-04-04T16:25:51.123 回答
0

自定义 SQL 请求

您可以使用 sp_helptext 命令找到 sp_helpindex 的描述,如下所示:

use sybsystemprocs
go

sp_helptext sp_helpindex
go

这将为您提供存储过程的定义。然后您可以提取所需的 SQL 请求(这可能很棘手,另一个 store_proc)。

用于处理 sp_helpindex 输出的 Shell 脚本

另一方面,它似乎只是一个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

希望这有所帮助。

于 2013-04-04T07:08:55.250 回答
0

在 Sybase 版本 SAP IQ/16 中,您可以获得以下索引列表(表名 my_table 区分大小写):

select *
from sys.sysindexes
where tname = 'my_table';
于 2017-03-08T17:52:55.610 回答