Интересное поведение Linked Server (MSSQL2K)

chekur13
Новичок
Posts: 30
Joined: 09 Feb 2002 10:01
Location: Kharkov, Ukraine

Интересное поведение Linked Server (MSSQL2K)

Post by chekur13 »

Обнаружил интересное поведение при работе с Linked Server
сервер1:

Microsoft SQL Server 2000 - 8.00.760 (Intel X86)
Dec 17 2002 14:22:05
Copyright (c) 1988-2003 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 (Build 3790: )


на нем выполняю след скрипт:



Code: Select all

use pubs
go

create table [test] (
   [sumrest] [numeric](25, 6) not null ,
   [currencyrest] [tinyint] not null ,
   [curatordept] [int] not null ,
   [docsubtype] [smallint] not null ,
   [ordid] [int] not null
)



insert into test ([sumrest] , [currencyrest] , [curatordept] , [docsubtype] , [ordid] )
values(400.000000, 3,   444   ,1,   280   )
insert into test ([sumrest] , [currencyrest] , [curatordept] , [docsubtype] , [ordid] )
values(-18.000000 ,3   ,444   ,7   ,280   )
insert into test ([sumrest] , [currencyrest] , [curatordept] , [docsubtype] , [ordid] )
values(-121.000000, 3   ,445   ,7   ,280   )
insert into test ([sumrest] , [currencyrest] , [curatordept] , [docsubtype] , [ordid] )
values(400.000000 ,3   ,444   ,1   ,245   )
insert into test ([sumrest] , [currencyrest] , [curatordept] , [docsubtype] , [ordid] )
values(-18.000000 ,3   ,444,   7   ,245   )
insert into test ([sumrest] , [currencyrest] , [curatordept] , [docsubtype] , [ordid] )
values(-111.000000, 3   ,445   ,7   ,245   )


select sum(sumrest) as sumrest, [currencyrest], curatordept, docsubtype
from pubs.dbo.test
where ordid = 280
group by [currencyrest], curatordept, docsubtype

select -sum(sumrest) as sumrest, [currencyrest], curatordept, docsubtype
from pubs.dbo.test
where ordid = 245
group by [currencyrest], curatordept, docsubtype

select sum(sumrest) as sumrest, [currencyrest], curatordept, docsubtype
from pubs.dbo.test
where ordid = 280
group by [currencyrest], curatordept, docsubtype
   union all
select -sum(sumrest) as sumrest, [currencyrest], curatordept, docsubtype
from pubs.dbo.test
where ordid = 245
group by [currencyrest], curatordept, docsubtype




все работает как и должно

теперь есть сервер2

Microsoft SQL Server 2000 - 8.00.760 (Intel X86)
Dec 17 2002 14:22:05
Copyright (c) 1988-2003 Microsoft Corporation
Enterprise Edition on Windows NT 4.0 (Build 1381: Service Pack 6)


к которому прилинкован сервер1.
выполняю запрос на сервере 2



Code: Select all

--1
select sum(sumrest) as sumrest, [currencyrest], curatordept, docsubtype
from СЕРВЕР1.pubs.dbo.test
where ordid = 280
group by [currencyrest], curatordept, docsubtype

--2
select -sum(sumrest) as sumrest, [currencyrest], curatordept, docsubtype
from СЕРВЕР1.pubs.dbo.test
where ordid = 245
group by [currencyrest], curatordept, docsubtype

--3
select sum(sumrest) as sumrest, [currencyrest], curatordept, docsubtype
from СЕРВЕР1.pubs.dbo.test
where ordid = 280
group by [currencyrest], curatordept, docsubtype
   union all
select -sum(sumrest) as sumrest, [currencyrest], curatordept, docsubtype
from СЕРВЕР1.pubs.dbo.test
where ordid = 245
group by [currencyrest], curatordept, docsubtype

итог 1 и 2 запросы выполнились
3 -

Code: Select all

Server: Msg 7346, Level 16, State 2, Line 14
Could not get the data of the row from the OLE DB provider 'SQLOLEDB'. Could not convert the data type because of a sign mismatch.
OLE DB error trace [OLE/DB Provider 'SQLOLEDB' IRowset::GetData returned 0x40eda:  Data status returned from the provider: [COLUMN_NAME=Union1008 STATUS=DBSTATUS_E_SIGNMISMATCH], [COLUMN_NAME=Union1009 STATUS=DBSTATUS_S_OK], [COLUMN_NAME=Union1010 STATUS=DBSTATUS_S_OK]].

:(
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Re: Интересное поведение Linked Server (MSSQL2K)

Post by tengiz »

А вот это похоже на баг. Если Вас не затруднит, попробуйте поменять тип колонки [currencyrest] с tinyint на smallint и повторить Ваш эксперимент.
Cheers
chekur13
Новичок
Posts: 30
Joined: 09 Feb 2002 10:01
Location: Kharkov, Ukraine

Post by chekur13 »

Действительно, если поменять на smallint то все отрабатывает нормально. С tinyint тоже нормально, если внести знак минуса в сумму, т.е

Code: Select all

select sum(sumrest) as sumrest, [currencyrest], curatordept, docsubtype 
from СЕРВЕР1.pubs.dbo.test
where ordid = 280
group by [currencyrest], curatordept, docsubtype
   union all
select sum(-sumrest) as sumrest, [currencyrest], curatordept, docsubtype
from СЕРВЕР1.pubs.dbo.test
where ordid = 245
group by [currencyrest], curatordept, docsubtype
chekur13
Новичок
Posts: 30
Joined: 09 Feb 2002 10:01
Location: Kharkov, Ukraine

Post by chekur13 »

Здравствуйте Тенгиз, еще одна неприятная ошибка, сервера те же

Code: Select all

use pubs
go

create table [test1] (
   [artc] int,
   [deptour] int,
   [qty] numeric (18,6)
)

create table [test2] (
   [artc] int,
   [deptour] int,
   [qty] numeric (18,6)
)


insert into test1 (artc , deptour , qty)
values(8214,   29,   2.000000)
insert into test1 (artc , deptour , qty)
values(58150,   29,   17.000000)
insert into test1 (artc , deptour , qty)
values(88764,   29,   84.000000)

insert into test2 (artc , deptour , qty)
values(132, 29   ,-48.000000)
insert into test2 (artc , deptour , qty)
values(133 ,29   ,-52.000000   )
insert into test2 (artc , deptour , qty)
values(134 ,29,   -23.000000   )


select
artc,
deptour,
sum(qty) as qty
from test1
where deptour = 29
group by deptour,artc
   union all
select
artc,
deptour,
-sum(qty) as qty
from test2
where deptour = 29
group by deptour,artc


artc        deptour     qty                                     
----------- ----------- ----------------------------------------
8214        29          2.000000
58150       29          17.000000
88764       29          84.000000
132         29          48.000000
133         29          52.000000
134         29          23.000000



при запросе к линкед серверу

Code: Select all

select 
artc,
deptour,
sum(qty) as qty
from server_nt.pubs.dbo.test1
where deptour = 29
group by deptour,artc
   union all
select
artc,
deptour,
-sum(qty) as qty
from server_nt.pubs.dbo.test2
where deptour = 29
group by deptour,artc

artc        deptour     qty                                     
----------- ----------- ----------------------------------------
8214        29          2.000000
58150       29          17.000000
88764       29          84.000000
29          132         48.000000
29          133         52.000000
29          134         23.000000



для второго запроса колонки artc и deptour поменялись местами!!!
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

chekur13 wrote:еще одна неприятная ошибка, сервера те же

Спасибо, я только что проверил - всё воспроизводится. Я перешлю Ваши сценарии правильным людям.
Cheers

Return to “Вопросы и новости IT”