我花了好几个小时试图解决这个问题。对于给我问题的列我在sql server中使用标量函数来获取名称。功能正确,工作正常。然后我使用存储过程与ssis一起使用。给出错误的列声明它在错误输出上没有相应的输出列。一切似乎都很好。我按照之前的建议做了以下几点:
这些是以前论坛的推荐。
我是一名实习生,希望自己得到这个,而不必问我的经理。我花了无数个小时试图解决这个问题。
有什么建议吗?
以下是我在OLE DB源中的查询
SELECT *
FROM RExtenstionBase R
LEFT OUTER JOIN AExtensionBase A
ON R.ASN = A.SN
AND R.ARN = A.R
此查询为我提供了Dynamics CRM所需的字段。
以下是我在OLE DB命令中的存储过程调用:
EXEC InsertRepairs ?,?,?,?,?,?,?,?,?,?
以下是我的存储过程脚本:
USE [MSCRM_RC]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[InsertRepairs]
-- Add the parameters for the stored procedure here
@ROID nvarchar(100),
@AType nvarchar(100),
@ARN nvarchar(100),
@DateReceived datetime,
@RForRR nvarchar(100),
@C nvarchar(100),
@SN nvarchar(100),
@ASN nvarchar(100),
@Performed nvarchar(100),
@COR decimal
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @newID AS UNIQUEIDENTIFIER
SET @newID = NEWID()
INSERT INTO [dbo].[A_RBase] /***BASE TABLE ALWAYS THE SAME ***/
([A_RCRIDID] /*Always change this tho */
,[CreatedOn]
,[CreatedBy]
,[ModifiedOn]
,[ModifiedBy]
,[CreatedOnBehalfBy]
,[ModifiedOnBehalfBy]
,[OwnerId]
,[OwnerIdType]
,[OwningBusinessUnit]
,[statecode]
,[statuscode]
,[ImportSequenceNumber]
,[OverriddenCreatedOn]
,[TimeZoneRuleVersionNumber]
,[UTCConversionTimeZoneCode])
VALUES
(@newID
,GETUTCDATE() -- CreatedOn
,'XXXXXXXXXXXXXXXXXXXXXXX' -- CreatedBy
,GETUTCDATE() -- ModifiedOn
,'XXXXXXXXXXXXXXXXXXXXXXX' -- ModifiedBy
,NULL -- CreatedOnBehalf
,NULL -- Modified''
,'XXXXXXXXXXXXXXXXXXXXXXX' -- OwnderId
,8
,'XXXXXXXXXXXXXXXXXXXXXXX'
,0 -- statecode
,1 -- statuscode
,5 -- ImportSequenceNumber
,NULL -- Overrid
,0 -- TimeZoneRule
,NULL) -- UTCConversion
INSERT INTO [dbo].[A_RExtensionBase]
([A_RCRID]
,[A_Name]
,[A_AType]
,[A_ARN]
,[A_DateReceived]
,[A_RForRR]
,[A_C]
,[A_SN]
,[A_ASN]
,[A_Performed]
,[A_COR])
VALUES
(@newID,
@ROID,
@AType,
@ARN,
@DateReceived,
@RForRR,
@C,
dbo.Lookup_SNID_GUID(@SN)
@ASN,
@Performed ,
@COR)
END
以下是我的标量值函数:
USE [MSCRM_RC]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[Lookup_SNID_GUID]
(
-- Add the parameters for the function here
@SN_Name nvarchar(100)
)
RETURNS UNIQUEIDENTIFIER
AS
BEGIN
-- Declare the return variable here
DECLARE @SN_GUID UNIQUEIDENTIFIER
SELECT @SN_GUID = SNID
FROM SNExtensionBase
WHERE name = (@SN_Name)
RETURN @SN_GUID
END
答案 0 :(得分:70)
显然这是SSIS包的常见错误。我通过钻入OLE DB源,单击列选项卡,找到错误消息中包含的可用外部列,然后取消选中复选框并重新检查它来消除错误。错误解决了!
答案 1 :(得分:2)
当向需要由现有SSIS包处理的表添加新列时,我经常遇到错误“错误输出没有相应的输出”。此错误附带一条错误消息,指出“值不在预期范围内”。
新添加的列需要由现有SSIS包处理。预期的行为是SSIS将识别出有一个新列,并在要处理的OLEDB源任务SSIS的列页面上选择此列。但是,在修改表格后第一次打开OLEDB源任务时,我收到以下错误消息的两倍:“值不在预期范围内。”打开编辑器和打开编辑器的“列”页面时出现错误消息。在OLEDB源任务的高级编辑器中,新列显示在OLEDB源输出列树中,但不显示在OLEDB源错误输出列树中。这是错误消息的实际根本问题。不幸的是,似乎无法手动添加缺失的列。
要解决此问题,请删除并重新添加正常编辑器的Columnns页面上新添加的列,如Jeff所述。
可能值得一提的是,OLEDB Source任务的数据源是修改后的MDS View。 Microsoft CRM Dynamics也在使用视图。这导致我得出结论,在修改数据类型或添加/删除列时,使用视图作为数据源可能会产生上述错误之一。
相关主题:How to fix SSIS : "Value, does not fall within expected range"?
所描述的解决方法是指使用Mircorsoft.NET Framework 3.5 SP1的Visual Studio 2008版本9.0.30729.4462 QFE。该数据库是SQL Server 2008 R2(SP2)。
答案 2 :(得分:0)
如果我错了,请纠正我,但是我发现在从源中获取数据时单击“预览”按钮会导致为列设置错误的长度,特别是对于字符串。 这可能是因为长度是根据预览数据确定的。因此,更好的做法是在选择source-table后单击Source-dialog中的Columns-tab。主要是使用ODBC源。