|
实用技巧
从SQL Server中提取索引信息
北京市卫生电子计算机中心
张猛
----
在使用 SQL Server 表时,经常需要取得表的索引关键字信息。例如:为了减少网络流量,数据校正的工作留在本地,必须在本地数据库上施行与远程数据库相同的商业规则。但是远程数据库上的规则修改后,本地规则的同步更新无法保证。必须使用有效的程序,能够取得远程数据库上的规则,才能保证本地规则与远程同步。
----
使用存储过程 sp_helpindex 可以从SQL Server 返回索引信息。存储过程sp_helpindex 返回一个cursor,cursor的内容就是指定表的索引信息。
----
sp_helpindex 返回的cursor中包含的字段有:
字段名 说明
INDEX_NAME 索引名称.
INDEX_DESCRIPTION 索引说明
INDEX_KEYS 索引表达式.
----
下面的例程有效地说明了sp_helpindex的具体使用方法:
----
* Sp_index.prg
----
* 定义服务器名称.,在实际使用时请用实际的SQL SERVER服务器名称代替
#DEFINE Connect_String 'DRIVER=
{SQL Server};SERVER=MY_SERVER;' + ;
'DATABASE=PUBS;UID=sa;PWD='
* 建立一个包含返回信息的 cursor
CREATE CURSOR SYS_Indexes (Table_Name
c(128), Index_Name c(128), ;
Index_Description c(128), Index_Keys c(128))
* 连接 SQL Server.
gnConnHandle=SQLSTRINGCONN(Connect_String)
IF gnConnHandle>0
* 取得 SQL Server 中可以使用的表的数量
SQLConnTables=SQLTABLES(gnConnHandle)
IF SQLConnTables>0
SELECT SQLResult
INCnt=0
DO WHILE !EOF()
* 建立一个执行存储过程的命令串
SQLCommand="sp_helpindex " + ALLTRIM(Table_Name)
* 执行存储过程,把数据返回 cursor.
=SQLEXEC(gnConnHandle,SQLCommand,'tmp_sys_data')
* 转到cursor 所在的工作区
SELECT tmp_sys_data
INSERT INTO SYS_Indexes ;
VALUES ;
(SQLResult.table_name, tmp_sys_data.Index_Name,;
tmp_sys_data.Index_Description, ;
tmp_sys_data.Index_Keys)
SELECT SQLResult
SKIP
ENDDO
=SQLDISCONN(gnConnHandle)
ENDIF
ENDIF
SELECT SYS_Indexes
BROW LAST
CLOSE ALL
RETURN
----
该程序适用于Visual FoxPro 3.0以上各版本。
|