Могу ли я использовать динамический sql в ASE для объявления курсора - PullRequest
0 голосов
/ 08 марта 2011

Я хочу использовать динамический sql для выбора имени базы данных для курсора.Возможно ли это или что-то подобное с помощью Sybase ASE?

create procedure myproc
  @dbname = varchar(20) = null as

declare mycur cursor for select @dbname..mytable

... use cursor

go

Ответы [ 2 ]

0 голосов
/ 03 июня 2014

Чтобы использовать динамический sql, сначала создайте временную таблицу, используя

Create table #mytemptab (col1 …, col2 …)

Построить динамический SQL, используя следующий метод

DECLARE @sqlstr VARCHAR(5000)

SELECT @sqlstr=’SELECT col1, col2 FROM ‘+@table

Теперь вставьте в созданную вами временную таблицу (убедитесь, что она имеет тот же тип данных, что и выходные данные sql)

SELECT @sqlstr= ‘Insert into #mytemptab (col1, col2 …) ‘+@sqlstr

Выполнить оператор SQL (чтобы вставить данные во временную таблицу)

EXECUTE (@sqlstr)

Теперь используйте временную таблицу в курсоре

DECLARE mycursor CURSOR FOR SELECT col1, col2 FROM #mytemptab

OPEN…

FETCH…

......

0 голосов
/ 13 июня 2011

Вы можете динамически создать временную таблицу
что-то вроде

create procedure myproc (@dbname  ....)

as

exec ('SELECT ...... into tempdb..test FROM '+@dbName+'..mytable')

- и затем

DECLARE Cursor1 for tempdb..test
open cursor 

и т. Д.

...