2012-01-23 21 views
0

我試圖識別ASE中組成密鑰的列。Sybase ASE識別多個表的密鑰列

Sybase擁有此處列出的解決方案:http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.help.ase.15.5/title.htm

下面我有一個稍微修改後的版本,但它僅適用(就像Sybase的解決方案)如果我查找了一個表,但我想用'在'關鍵字中查找所有表格。

我可以得到一些幫助,至於爲什麼下面的解決方案不起作用?它僅生成'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

有兩種解決方法:

使用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。