Преодолеть ограничение 8k для параметра хранимой процедуры сервера sql - PullRequest
1 голос
/ 23 декабря 2008

Недавно я решил проблему, которая возникала в приложении VB6 при сохранении больших двоичных объектов на сервере sql с использованием ADO 2.8 и метода AppendChunck для Recordset.Field. Если бы данные были слишком большими, я бы получил либо «Invalid Handle» в цикле for, либо «недостаточно системного хранилища для выполнения этой операции». Я исправил проблему, отправив куски в хранимую процедуру и используя «updatetext». Тем не менее, теперь я могу отправлять только 8 тысяч символов одновременно из-за ограничения 8 тысяч. Кто-нибудь знает хороший обходной путь? Ниже мой sproc.

@chunck binary(8000),  
@result_id int

as

declare @pointer binary(16),  
        @imagelength int,  
        @datalength int  


--get the pointer and length to the image column    
select @pointer = textptr(result_image),  
       @imagelength = datalength(result_image)  
from dbo.dash_result  
where result_id = @result_id

if @pointer is null

update dbo.dash_result  
set result_image = @chunck  
where result_id = @result_id  

else

begin

  --append the chunck of data to the end  
  set @datalength = datalength(@chunck)  
  updatetext dbo.dash_result.result_image @pointer @imagelength 0 @chunck

end

Ответы [ 2 ]

2 голосов
/ 23 декабря 2008

Если вы используете SQL Server 2005, вы можете использовать тип данных varbinary (MAX) или varchar (MAX), в зависимости от типа сохраняемых данных. Я считаю, что они могут содержать до 2 гигабайт данных.

0 голосов
/ 23 декабря 2008

Для sql server 2000, объявите параметр как текст. Обратите внимание, что это должен быть параметр, а не локальная переменная, только параметры могут быть текстовыми, а не локальными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...