Войти

Показать полную графическую версию : Использование в хранимой процедуре строковой переменной


Delirium
16-02-2011, 02:55
Столкнулся с нерешаемой пока проблемой.
Имеется процедура такого вида:


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
А почему не держать таблицу айдишек в таблице?!

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




© OSzone.net 2001-2012