警告:我没有SSIS的经验,也没有SQL Server的经验,所以这可能是一个愚蠢的问题。
我的任务是定期更新不同服务器上的数据库中的表。我已经关注了SQLServer Central上的Stairway to Integration Services文章,我认为我已经正确设计了它,但我在查找时遇到问题,以确定哪些行应该更新。
难点在于我的源数据中有2个字段(TaxOfficeNumber nvarchar(3)和PAYERef nvarchar(50)),它们与目标表中的单个字段EmployerPAYEReference varchar(256)相关联。此外,目标字段已丢失任何前导零。因此,我的表中的'0123'和'MYREF'应链接到目的地的'23 / MYREF'。
我设法将所有内容都转换为相同的格式和数据类型,但我无法连接查找中的字段。
我的来源如下:
SELECT Submitter_Ref_Number
, Transmission_DateTime
, MessageStatus
, HMRC_UniqueID
, HMRC_Ack_DateTime
, Product_Name
, CAST(CAST(CAST(TaxDistrictNumber AS int) AS varchar(3)) + '/' + PAYERef AS varchar(50)) AS EmployerPAYReference
FROM dbo.P11D
,查找如下:
SELECT [EmployerPAYEReference]
FROM [P11D].[dbo].[hmrc_test]
在Lookups编辑器中,当我尝试链接列时,出现错误:cnnot将输入列与te查询列匹配,因为数据类型不匹配。
我尝试过各种各样的选择并且无处可去,所以有什么建议吗?
使用SQL Server 2008 R2
答案 0 :(得分:0)
DT_I4是一个4字节的整数;我不确定SSIS是如何成功的
CAST(CAST(TaxDistrictNumber AS int) AS varchar(3)) + '/' + whatever
成一个整数,但也许更有知识的人可以回答这个问题!
无论如何,您需要在Source和Lookup之间添加数据转换,并将列转换为DT_STR。在我的例子中,因为我希望输出列名称为EmployerPAYEReference,所以我更改了源中的原始CAST以命名列INP_EmployerPAYEReference,然后将转换后的列名称设置为EmployerPAYEReference。
答案 1 :(得分:0)
此错误的常见原因是SSIS默认将所有字符串转换为unicode字符串。 您可以使用“高级编辑器”更改主流的列来解决此问题 要么 在查找查询中将它们转换为NCHAR \ NVARCHAR。