警告:我没有SSIS的经验,SQL Server的经验也不多,所以这可能是一个愚蠢的问题。
我的任务是定期更新不同服务器上数据库中的表。我在SQLServer Central上遵循了集成服务的阶梯文章,我认为我已经正确地设计了它,但是我在查找以确定应该更新哪些行时遇到了问题。
困难在于我的源数据中有2个字段(TaxOfficeNumber nvarchar(3)和PAYERef nvarchar(50)),它们与目标表中的单个字段employerpayerreference 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]
在查找编辑器中,当我尝试链接列时,我得到一个错误:不能将输入列匹配到查找列,因为数据类型不匹配。
我已经尝试了各种选择,但一无所获,所以有什么建议吗?
使用SQL Server 2008 R2
DT_I4为4字节整型;我不知道SSIS是怎么把
CAST(CAST(TaxDistrictNumber AS int) AS varchar(3)) + '/' + whatever
变成一个整数,但也许更有知识的人可以回答这个问题!
无论如何,您需要在源和查找之间添加数据转换,并将列转换为DT_STR。在我的例子中,因为我希望输出列名为employerpayerreference,所以我将Source中的原始CAST更改为将列命名为inp_employerpayerreference,然后将转换后的列名设置为employerpayerreference。
这个错误的一个常见来源是SSIS默认情况下将所有字符串转换为unicode字符串。可以通过使用高级编辑器更改主流程的列来修复此问题或在查找查询中将它们转换为NCHARNVARCHAR