Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Результат CAST (@VARBINARY as VARCHAR(MAX)) обрезается до длины 1K  [new]
OlM
Guest
Рад приветствовать!

Столкнулся с неожиданной проблемой. Имеется:

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.0 <X64> (Build 6001: Service Pack 1)

На нем живет таблица (сильно урезано):

CREATE TABLE [dbo].[T_PDFS](
	[ID] [uniqueidentifier] NOT NULL CONSTRAINT [DF_T_PDFS_ID]  DEFAULT (newid()),
	[FILE_DATA] [varbinary](max) NULL,
 CONSTRAINT [PK_T_PDFS] PRIMARY KEY NONCLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


в которой хранятся документы в виде PDF файлов, как они когда-то были созданы и отосланы клиентам.

Запрос типа:
SELECT CONVERT (VARCHAR(MAX), FILE_DATA) FROM T_PDFS WHERE ID = '97EBC0AA-2CD5-4E50-928D-4B1D059C3745'


грамотно возвращает содержимое PDF-файла одной строкой. Если эту строку засунуть в файл - то вот он, PDF документ.
Однако если выполняем процедуру

EXEC msdb.dbo.sp_send_dbmail 
		@recipients = 'aaa@bbb.com'
	,	@subject = 'Test 4'
	,	@body = 'This is just a test' 
	,	@query = 'SELECT CONVERT (VARCHAR(MAX), FILE_DATA) FROM T_PDFS WHERE ID = ''97EBC0AA-2CD5-4E50-928D-4B1D059C3745'''
	,	@execute_query_database = 'MyDatabase'
	,	@attach_query_result_as_file = 1	
	,	@query_attachment_filename = 'Document.pdf'
	,	@query_result_header = 0
	,	@query_no_truncate = 1


то по почте в аттачменте приходит только обрывок файла длиной 1K.
В то же время если выполнить следующее:

EXEC msdb.dbo.sp_send_dbmail 
		@recipients = 'aaa@bbb.com'
	,	@subject = 'Test 4'
	,	@body = 'This is just a test' 
	,	@query = 'SELECT FILE_DATA FROM T_PDFS WHERE ID = ''97EBC0AA-2CD5-4E50-928D-4B1D059C3745'''
	,	@execute_query_database = 'MyDatabase'
	,	@attach_query_result_as_file = 1	
	,	@query_attachment_filename = 'Document.pdf'
	,	@query_result_header = 0
	,	@query_no_truncate = 1


то приходит весь файл, целиком, все несколько сотен килобайт, но... в неудобоваримом формате.

Вопрос - что я делаю не так? Как получить в аттачменте весь файл в нужном формате?

Спасибо!
22 мар 12, 19:23    [12297911]     Ответить | Цитировать Сообщить модератору
 Re: Результат CAST (@VARBINARY as VARCHAR(MAX)) обрезается до длины 1K  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
Raw binary кастовать напрямую в строку, и пытаться там что-то разобрать - оригинально. Скорее всего, там обрезается по каким-нибудь символам типа cr/lf. Попробуйте кодировать в base64 или в hexadecimal.
22 мар 12, 19:41    [12297968]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить