Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хранимая процедура и динамический курсор? / 7 сообщений из 7, страница 1 из 1
24.08.2001, 09:49
    #32012784
Толик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура и динамический курсор?
Доброго дня.

Нужна следующая хранимая процедура...

Входные параметры:
@Name - имя таблицы >> 'Table1'
@Params - условие выборки >> 'WHERE ID IN (10,11,12)'

Выходные параметры:
@NameList - список имен >> 'Name1, Name2, Name3'

Вопрос, соотв. в следующем, как это сделать....
Если бы не динамическое условие в @Params, то я бы слепил курсор, а потом из него переложил все в строку...
Но я не догоняю, как этот курсор создать...

Если также будут другие варианты на тему решения этой задачки, то буду рад их лицезреть..
Всем заранее спасибо...
...
Рейтинг: 0 / 0
24.08.2001, 10:08
    #32012789
Pandre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура и динамический курсор?
Используйте объявление курсора через EXECUTE:

DECLARE @s as varchar(255)
set @s='DECLARE c1 CURSOR FOR SELECT NAME FROM '+@Name+' '+@Params
EXECUTE(@s)
OPEN c1
...
...
Рейтинг: 0 / 0
24.08.2001, 10:10
    #32012790
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура и динамический курсор?
А, собственно, зачем курсор ? Если я правильно въезжаю в задачу, то решение будет примерно следующее -

create proc p1
@TableName sysname
, @Params nvarchar(1000)
, @NameList nvarchar(1000) out
as
begin
declare @sql nvarchar(1000)
set @NameList = ''

set @sql = 'select @NameList = @NameList + field1 + '', '' from ' + @TableName + ' ' + @Params

exec sp_executesql @sql, N'@NameList nvarchar(1000) out', @NameList = @NameList out

set @NameList = Left(@NameList, Len(@NameList) - 1)
end

И никаких курсоров...
...
Рейтинг: 0 / 0
24.08.2001, 11:09
    #32012804
Толик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура и динамический курсор?
Большое спасибо, Pandre & GreenSunrise!

Ваши ответы очень помогли.

Только есть вопрос к GreenSunrise:

Возникает ситуация когда @Params содержат условие которое не выдает ни одной записи.
И тогда возникает ошибка.

Invalid length parameter passed to the substring function.

Это как-нибудь лечиться?
...
Рейтинг: 0 / 0
24.08.2001, 12:27
    #32012810
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура и динамический курсор?
просто перепиши последние строки
...
set @sql = 'select @NameList = @NameList + '', '' + field1 from ' + @TableName + ' ' + @Params

exec sp_executesql @sql, N'@NameList nvarchar(1000) out', @NameList = @NameList out

set @NameList = substring(@NameList,3, 10000)
end
...
Рейтинг: 0 / 0
24.08.2001, 13:12
    #32012817
Толик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура и динамический курсор?
to SergSuper, спасибо.

действительно, чё то я ступил.

p.s. Маленькая поправка

set @NameList = substring(@NameList,3, <b>Len(@NameList)<b&gt
...
Рейтинг: 0 / 0
27.08.2001, 06:35
    #32012876
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая процедура и динамический курсор?
2 Толик
Не считайте себя умнее разработчиков SQL сервера - проверка на длинну строки всяко предусмотрена ими. И к тому же Вы написали вообще непонятно что: я бы еще понял если бы было написано substring(@NameList,3, Len(@NameList) -2 ). Вообщем не надо задумывайться над такими мелочами, пишите так, как я предлагаю

С приветом Сергей
PS. "Чем больше думаешь, тем глупее становишься" (С) Мао Цзедун
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хранимая процедура и динамический курсор? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]