Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Использование в хранимой процедуре строковой переменной (http://forum.oszone.net/showthread.php?t=199614)

Delirium 16-02-2011 02:55 1614067

Использование в хранимой процедуре строковой переменной
 
Столкнулся с нерешаемой пока проблемой.
Имеется процедура такого вида:


Код:

ALTER PROCEDURE [dbo].[sp_ReturnMagazineListForSearch] (@doc_ids NVARCHAR(MAX))
AS
BEGIN
        DECLARE @str NVARCHAR(MAX)
        SET @str = 'SELECT distinct id, onControl, SendTo FROM View_Magazines where id in (' + cast(@doc_ids as char) + ')'
        EXEC sp_executesql @str
END

Т.е. процедура возвращает список документов, где ID попадает в указанный мною список типа int.
Пример готовой строки:
Код:

SELECT distinct id, onControl, SendTo FROM View_Magazines where id in (69,72,74,79,81,82,87,89,90,95,97,98,103,105,106,111,113,114,119,121,122,127)
Все бы ничего, все работает, до определенного момента:
В базе 28000 тестовых записей, у них у всех номер, к примеру, равен 25.
При формировании поиска по номеру возвращается готовая строка, длина которой более 33 000 символов.

NVARCHAR(MAX) - всего 8000 символов. Использовать TEXT, NTEXT в процедуре не разрешается (The text, ntext, and image data types are invalid for local variables.). Вопрос - как обойти это ограничение?

Busla 17-02-2011 13:10 1615263

А почему не держать таблицу айдишек в таблице?!

Delirium 18-02-2011 00:53 1615787

Busla, этот запрос формируется динамически, поэтому только так.
Проблема решена, надо было убрать лишнее преобразование cast(@doc_ids as char), т.к. @doc_ids уже и так строковая. В итоге формируется строка типа nvarchar(MAX) длиной, ограниченной только памятью компьютера.


Время: 20:35.

Время: 20:35.
© OSzone.net 2001-