T-SQL - 从nvarchar转换为int&匹配到nchar

时间:2016-12-16 20:58:25

标签: sql-server database join sql-server-2008-r2 table-variable

在两个设置相同的独立数据库服务器上使用SQL Server 2008 R2(SP1)。使用已创建的表和数据,为此示例进行了简化。我遇到的问题是一个查询返回两个服务器上的数据,另一个查询只返回其中一个数据。我试图识别并更改控制它的SQL设置或属性。

tv_tbllOnenchar)加入tv_tblTwonvarchar),每个列都进入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_tblTwotv_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查询产生结果。

到目前为止我检查过的任何内容(列,表,数据库和服务器的属性,整理)都是相同的。关于为什么差异,或者检查/改变什么的任何想法?

谢谢!

0 个答案:

没有答案