Sybase ASE идентифицирует столбцы ключей нескольких таблиц - PullRequest
0 голосов
/ 24 января 2012

Я пытаюсь определить столбцы, составляющие ключи в 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]
  )
)

1 Ответ

0 голосов
/ 24 января 2012

У вас есть два решения:

Используя ИЛИ

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.

...