2013-11-26 26 views
0

我目前在拉尔森的工作交付商业智能与Microsoft SQL Server的第8章2012交付商业智能与Microsoft SQL Server 2012包错误

书中指示我建立一个SQL Server 2012 Integration Services包使用基于SQL Server 2012(ADO.NET,名为MaxMinAccounting的数据库)的数据源和名为MaxMinManufacturingDM的另一个非标准化数据集市数据库填充SQL Server目标任务。

虽然我意识到SQL Server 2012中提供的导入向导可以为我创建这个任务,但我认为本书正在尝试构建将来创建包的基础,因为它们变得更加复杂。所以我想在SSIS中完成这个任务。

在源ADO.NET任务,我有一个查询,看起来像这样:

SELECT LocationCode As PlantNumber, 
       LocationName as PlantName, 
       CAST(CountryCode AS varchar(2)) AS CountryCode 
FROM Locations 
WHERE LOCATIONTYPE = 'Plant Site' 

看来,LocationCode是INT,LOCATIONNAME是(50)和COUNTRYCODE被列为NCHAR一个varchar (2)

在我的目的地表DimPlant,我有三列。 PlantNumber作为int,PlantName作为nvarchar(30)和countrycode作为nvarchar(2)

起初我认为数据类型可能由于它们不同而不能正确映射。所以我决定使用一个强制转换语句来改变数据类型。现在,当我运行这个软件包时,所有的东西都出错了,SSIS也没有给我任何关于什么是错误的解释。我很沮丧,并会感谢任何建议。

+1

您需要将DimPlant中的PlantName列的大小从'varchar(30)'增加到'varchar(50)'。 – Stoleg

+0

至少发布错误。作为开发人员,您需要决定如何将可能的50个字符的数据放入只有30个字符的字段中。您可以截断最后20个字符并可能丢失数据。或者你可能会错误的包。或者你可以扩展目标表中的字段。这是一个真实的世界场景,在现实世界中,您可以修复目标数据类型或截断字符。 –

回答

0

我选择使目标DIM表格为50个字符的字段。我还发现SSIS有一个不好的习惯,如果一张桌子出了问题,就不会自行清理。我发现我创建的每个数据步骤通常在SSMS中都有一个对应的DELETE FROM (table Name)

感谢您的回复。