Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не выполняется хранимка на линкованном сервере  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
Возвращается такая ошибка:
Поставщик OLE DB "STREAM" для связанного сервера "(null)" вернул сообщение "Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена.".
Сообщение 0, уровень 11, состояние 0, строка 0
При выполнении текущей команды возникла серьезная ошибка.. При наличии результатов они должны быть аннулированы.

Вот скрипт подключения:
EXEC master.dbo.sp_addlinkedserver @server = N'test', @srvproduct=N'MSSQL', @provider=N'MSDASQL', 
@provstr=N'driver={SQL Server};SERVER=test;UID=test;PWD=test;'

Вот версия линкованного сервера:
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) Oct 14 2005 00:33:37 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition
on Windows NT 5.2 (Build 3790: Service Pack 2)

Вот основного:
Microsoft SQL Server 2008 (SP3) - 10.0.5775.0 (X64) Mar 8 2012 01:33:49 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition (64-bit)
on Windows NT 6.0 <X64> (Build 6002: Service Pack 2)

Процедура должна возвращать набор записей в виде xml raw, в тоже время любая процедура записей не возвращающая, выполняется нормально. Просто набор записей тоже не возвращается.

В какую сторону копать?
4 сен 12, 17:12    [13113204]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется хранимка на линкованном сервере  [new]
Glory
Member

Откуда:
Сообщений: 104751
When EXECUTE is used against a remote stored procedure, or to execute a pass-through command against a linked server, OUTPUT parameters cannot be any one of the large object (LOB) data types.
4 сен 12, 17:46    [13113433]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется хранимка на линкованном сервере  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
А набор записей получается это one of the large object (LOB) data types?

Я попробовал зайти с другого конца, перетащить хранимку на основной сервер, но хранимка не создалась, вываливая ошибку вот в этой части:
+
declare @v table (DOC_ID int, LastUpdate datetime, TAG nvarchar(5), Field nvarchar(max));

/*
1я часть
Несовпадение типов между связывающей и рекурсивной частями в столбце "Field" рекурсивного запроса "v".
*/
with v as (
	select  DOC_ID,
		dbo.mp_MARCCorrectionDate(Item) LastUpdate,
		convert(nvarchar(max),Item) + @DLM_FLD Item, 
		convert(nvarchar(max), '') Field,
		convert(int, 0) Length
	from	test.books.dbo.DOC
	where	dbo.mp_MARCCorrectionDate(Item) >= @Start
		and dbo.mp_MARCCorrectionDate(Item) <= @Finish	
	union all
	select	DOC_ID,
		dbo.mp_MARCCorrectionDate(Item),
		convert(
			nvarchar(max), 
			stuff(Item, 1, charindex(@DLM_FLD, Item),'')
		), 
		substring(Item, 0,  charindex(@DLM_FLD, Item)),
		convert(int,charindex(@DLM_FLD, Item))
	from v
	where	charindex(@DLM_FLD, Item) <> 0
)
insert into @v 
select	DOC_ID, 
	LastUpdate,
	substring(Field,1,5) TAG,
	Field
from v where Length<>0

/*
2я часть, аналогичная первой
Ошибок нет. Если первую закомментить, процедура создается нормально.
*/
;with v as (
	select	convert(int, 0) id,
			DOC_ID,
			LastUpdate,
			TAG,
			convert(nvarchar(max),Field) +@DLM_SUBFLD Item, 
			convert(nvarchar(max), '') Field,
			convert(int, 0) Length
	from @v 
	union all
	select	id + 1,
			DOC_ID,
			LastUpdate,
			v.TAG,
			convert(nvarchar(max), 
				stuff(Item, 1, 
					charindex(@DLM_SUBFLD, Item),''
				)
			), 
			substring(Item, 0,  charindex(@DLM_SUBFLD, Item)),
			convert(int,charindex(@DLM_SUBFLD, Item))
	from v
	where charindex(@DLM_SUBFLD, Item) <> 0 
)
select	DOC_ID, left(v.TAG,3) TAG, v.LastUpdate,
		substring(Field,1,1) CODE, 
		substring(Field,2,len(Field)-1) SubField--,
from v 
where Length<>0 and id>1 
order by v.doc_id, v.tag
for xml raw
Попробовал substring обернуть convert'ом, но ошибка не исчезла.
4 сен 12, 18:22    [13113625]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется хранимка на линкованном сервере  [new]
Glory
Member

Откуда:
Сообщений: 104751
Antonariy
Попробовал substring обернуть convert'ом, но ошибка не исчезла.

Текст ошибки придумать самим ?

Antonariy
А набор записей получается это one of the large object (LOB) data types?

for xml raw - это не набор записей
4 сен 12, 18:28    [13113659]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется хранимка на линкованном сервере  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
Glory
Текст ошибки придумать самим ?
Текст ошибки был в комментарии в исходнике:
Несовпадение типов между связывающей и рекурсивной частями в столбце "Field" рекурсивного запроса "v".

Glory
for xml raw - это не набор записей
И для набора и для for xml ошибка была одна и та же.
4 сен 12, 18:38    [13113685]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется хранимка на линкованном сервере  [new]
Glory
Member

Откуда:
Сообщений: 104751
Antonariy
Текст ошибки был в комментарии в исходнике:
Несовпадение типов между связывающей и рекурсивной частями в столбце "Field" рекурсивного запроса "v".

Это ваш перевод
А нужно оригинальное сообщение сервера. С номером и тд

Antonariy
И для набора и для for xml ошибка была одна и та же.

Когда описываете ситуацию, не надо одни вещи называть именами других вещей
4 сен 12, 18:43    [13113702]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется хранимка на линкованном сервере  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
Glory
А нужно оригинальное сообщение сервера. С номером и тд
Сообщение 240, уровень 16, состояние 1, процедура MARCSQL_CorrectedRecords, строка 27
Несовпадение типов между связывающей и рекурсивной частями в столбце "Field" рекурсивного запроса "v".

Glory
Когда описываете ситуацию, не надо одни вещи называть именами других вещей
Я не называл xml набором записей.
4 сен 12, 18:48    [13113715]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется хранимка на линкованном сервере  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
Несовпадение типов было из-за того, что поле test.books.dbo.DOC.Item имеет тип text, и даже промежуточная вьюшка, делающая convert(nvarchar(max),Item) не помогла. Причем этот же text в той же процедуре но на самом сервере test ошибок не вызывает. Пришлось сделать так, ошибка исчезла:

declare @tmp table (DOC_ID int, Item nvarchar(max))

insert into @tmp
select	DOC_ID, ITEM
from	MGGU_MARC.books.dbo.DOC
where	dbo.mp_MARCCorrectionDate(Item) >= @Start
		and dbo.mp_MARCCorrectionDate(Item) <= @Finish	

with v as (select 
...
from @tmp
union
5 сен 12, 11:51    [13116399]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить