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

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

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

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

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

Если также будут другие варианты на тему решения этой задачки, то буду рад их лицезреть..
Всем заранее спасибо...
...
Рейтинг: 0 / 0
Хранимая процедура и динамический курсор?
    #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
Хранимая процедура и динамический курсор?
    #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
Хранимая процедура и динамический курсор?
    #32012804
Толик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо, Pandre & GreenSunrise!

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

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

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

Invalid length parameter passed to the substring function.

Это как-нибудь лечиться?
...
Рейтинг: 0 / 0
Хранимая процедура и динамический курсор?
    #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
Хранимая процедура и динамический курсор?
    #32012817
Толик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to SergSuper, спасибо.

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

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

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

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


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