Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Хранимая процедура и динамический курсор?
|
|||
|---|---|---|---|
|
#18+
Доброго дня. Нужна следующая хранимая процедура... Входные параметры: @Name - имя таблицы >> 'Table1' @Params - условие выборки >> 'WHERE ID IN (10,11,12)' Выходные параметры: @NameList - список имен >> 'Name1, Name2, Name3' Вопрос, соотв. в следующем, как это сделать.... Если бы не динамическое условие в @Params, то я бы слепил курсор, а потом из него переложил все в строку... Но я не догоняю, как этот курсор создать... Если также будут другие варианты на тему решения этой задачки, то буду рад их лицезреть.. Всем заранее спасибо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2001, 09:49 |
|
||
|
Хранимая процедура и динамический курсор?
|
|||
|---|---|---|---|
|
#18+
Используйте объявление курсора через EXECUTE: DECLARE @s as varchar(255) set @s='DECLARE c1 CURSOR FOR SELECT NAME FROM '+@Name+' '+@Params EXECUTE(@s) OPEN c1 ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2001, 10:08 |
|
||
|
Хранимая процедура и динамический курсор?
|
|||
|---|---|---|---|
|
#18+
А, собственно, зачем курсор ? Если я правильно въезжаю в задачу, то решение будет примерно следующее - 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 И никаких курсоров... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2001, 10:10 |
|
||
|
Хранимая процедура и динамический курсор?
|
|||
|---|---|---|---|
|
#18+
Большое спасибо, Pandre & GreenSunrise! Ваши ответы очень помогли. Только есть вопрос к GreenSunrise: Возникает ситуация когда @Params содержат условие которое не выдает ни одной записи. И тогда возникает ошибка. Invalid length parameter passed to the substring function. Это как-нибудь лечиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2001, 11:09 |
|
||
|
Хранимая процедура и динамический курсор?
|
|||
|---|---|---|---|
|
#18+
просто перепиши последние строки ... 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2001, 12:27 |
|
||
|
Хранимая процедура и динамический курсор?
|
|||
|---|---|---|---|
|
#18+
to SergSuper, спасибо. действительно, чё то я ступил. p.s. Маленькая поправка set @NameList = substring(@NameList,3, <b>Len(@NameList)<b> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2001, 13:12 |
|
||
|
Хранимая процедура и динамический курсор?
|
|||
|---|---|---|---|
|
#18+
2 Толик Не считайте себя умнее разработчиков SQL сервера - проверка на длинну строки всяко предусмотрена ими. И к тому же Вы написали вообще непонятно что: я бы еще понял если бы было написано substring(@NameList,3, Len(@NameList) -2 ). Вообщем не надо задумывайться над такими мелочами, пишите так, как я предлагаю С приветом Сергей PS. "Чем больше думаешь, тем глупее становишься" (С) Мао Цзедун ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 06:35 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1825753]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
11ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 381ms |

| 0 / 0 |
