在两个设置相同的独立数据库服务器上使用SQL Server 2008 R2(SP1)。使用已创建的表和数据,为此示例进行了简化。我遇到的问题是一个查询返回两个服务器上的数据,另一个查询只返回其中一个数据。我试图识别并更改控制它的SQL设置或属性。
tv_tbllOne
(nchar
)加入tv_tblTwo
(nvarchar
),每个列都进入tv_tblThreeA
& tv_tblThreeB
。
表格定义:
declare @tv_tblOne TABLE
(
[Record] [int],
[Info1] [nchar](25),
[DataFld] [varchar](20)
);
declare @tv_tblTwo TABLE
(
[idFld] [nvarchar](12),
[DataFld2] [varchar](20)
);
declare @tv_tblThreeA TABLE
(
[idFld] [nvarchar](12),
[tblThreeData] [varchar](20)
);
declare @tv_tblThreeB TABLE
(
[idFld] [nvarchar](12),
[tblThreeData] [varchar](20)
);
以下是tv_tblOne
&的初始化tv_tblTwo
。 tv_tblOne
数据[Info1
nchar(25)字段]将始终具有前导零抑制。
tv_tblTwo
数据[idFld
nvarchar(12)字段)可能会也可能不会抑制前导零。它也可以是一个5位数字。
INSERT INTO @tv_tblOne ([Record], [Info1], [DataFld])
VALUES (1, 6133, 'DataRec1'), (2, 31509, 'DataRec2'),
(3, 8150, 'DataRec3'), (4, 10531, 'DataRec4')
INSERT INTO @tv_tblTwo ([idFld], [DataFld2])
VALUES ('06133', 'Tbl2DataRec1'), ('31509', 'Tbl2DataRec3')
INSERT INTO @tv_tblTwo ([idFld], [DataFld2])
VALUES (8150, 'Tbl2DataRec2'), (10531, 'Tbl2DataRec4')
此代码在两个数据库服务器上生成结果。
--Produced results on both DB Server1 & Server2
insert into @tv_tblThreeB
select
CAST(t1.Info1 as INT),
t2.DataFld2
from @tv_tblOne t1
inner join @tv_tblTwo t2 on
(CAST(t2.idFld as INT) = CAST(t1.Info1 as INT))
此代码仅在一台服务器上生成结果。
-- Produced results only on DB Server1
insert into @tv_tblThreeA
select
t1.Info1,
t2.DataFld2
from @tv_tblOne t1
inner join @tv_tblTwo t2 on
CAST(t2.idFld as INT) = t1.Info1;
表变量表表示同一服务器上两个单独数据库上的表。 One和ThreeA& ThreeB将位于同一个数据库中;两个将位于同一服务器上的不同数据库中。在其中使用JOIN查询都不会产生错误。在一台服务器上都返回结果;在另一台服务器上,只有第一个JOIN查询产生结果。
到目前为止我检查过的任何内容(列,表,数据库和服务器的属性,整理)都是相同的。关于为什么差异,或者检查/改变什么的任何想法?
谢谢!