2012-01-23 17 views
0

ASEでキーを構成する列を識別しようとしています。Sybase ASEは複数のテーブルのキーの列を識別します

Sybaseはここに記載されている解決策があります。http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.help.ase.15.5/title.htm

を私は、単一のテーブル用に見ればしかし、それは唯一(ただSybaseのソリューションとして)働く、下記少し変更したバージョンを持っていますが、私は 'を使用したいですin 'キーワードを使用して、すべてのテーブルをワンショットで検索します。

私は以下の解決策が機能しない理由についていくつかの助けを得ることができますか? 't5'テーブルの列のリストのみを生成します。

declare @keycnt integer 
declare @objname varchar(256) 
select @keycnt = keycnt, @objname = sysobjects.name from sysindexes, sysobjects 
    where 
    --sysobjects.id = object_id("t5") 
    --sysobjects.id = object_id("t4") 
    sysobjects.id in (object_id("t5"), object_id("t4")) 
    and sysobjects.id = sysindexes.id 
    and indid = 1 
while @keycnt > 0 
begin 
    select index_col(@objname, 1, @keycnt) 
    select @keycnt = @keycnt - 1 
end 

これらは私がテスト用に使用していますテーブルです:

CREATE TABLE t4(
    [value] [varchar] (500) not NULL , 
    CONSTRAINT pk_g4 PRIMARY KEY CLUSTERED (
    [value] 
) 
) 

CREATE TABLE t5(
    [myvalue] [varchar] (500) not NULL , 
    CONSTRAINT pk_g4 PRIMARY KEY CLUSTERED (
    [myvalue] 
) 
) 

答えて

0

次の2つのソリューションを持っている:

使用

OR

declare @keycnt integer 
declare @objname varchar(256) 
select @keycnt = keycnt, @objname = sysobjects.name from sysindexes, sysobjects 
    where 
    --sysobjects.id = object_id("t5") 
    --sysobjects.id = object_id("t4") 
    (sysobjects.id = object_id("t5") OR sysobjects.id = object_id("t4")) 
    and sysobjects.id = sysindexes.id 
    and indid = 1 
while @keycnt > 0 
begin 
    select index_col(@objname, 1, @keycnt) 
    select @keycnt = @keycnt - 1 
end 

または動的SQLを使用しますINを正しく使用する。

関連する問題