2014-01-08 94 views
11

我花了數小時試圖解決此問題。在sql server中使用標量函數來獲取名稱的問題,該函數是正確的,並且工作正常,然後使用存儲過程與ssis一起使用,給出錯誤的列表示它沒有相應的。在錯誤輸出輸出列一切似乎要被罰款我已經做了按照前文的建議如下:錯誤「...非錯誤輸出中的OLE DB Source.Outputs [OLE DB源輸出] .Columns [XXXXXXXX]沒有相應的輸出

  1. 刪除源和目的地,並重新映射一切
  2. 更改DelayValidation道具erty真
  3. 更改的最大誤差數到100
  4. 未經檢查和複查源可用外部列

這些都是按照前文的論壇的建議。

我是一名實習生,希望自己做到這一點,而不必問我的經理。我花了無數個小時試圖解決這個問題。

有什麼建議嗎?

編輯增加價值的問題

以下是我在我的OLE DB源

SELECT * 
FROM RExtenstionBase R 
LEFT OUTER JOIN AExtensionBase A 
ON R.ASN = A.SN 
AND R.ARN = A.R 

該查詢給了我,我從動態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

我花了幾秒鐘的時間閱讀這個問題;)幫助我理解這個問題。您有一個使用OLE DB Source的查詢。該查詢調用用戶定義的標量值函數。不知何故,你會在問題的標題中看到錯誤?我的事實是否正確?如果是這樣,我們可能需要查看更多信息。數據流的屏幕截圖和確切的錯誤消息是一個很好的起始位置 – billinkc

+0

運行SSIS包時出現錯誤。我在我的數據流任務中有一個OLE DB源和一個OLE DB命令。我的OLE DB命令是什麼使用我的存儲過程。我將數據插入MS Dynamics CRM。您在說明錯誤是錯誤的問題時是正確的 –

+0

良好的編輯,但現在我們知道更多關於程序包的工作方式,讓我們專注於OLE DB命令。你能說明它是如何連接的+它裏面的代碼? – billinkc

回答

47

顯然這是一個SSIS包的常見錯誤。我通過鑽入OLE DB Source,單擊列選項卡,找到包含在錯誤消息中的可用外部列,然後取消選中該複選框並重新檢查它來消除錯誤。錯誤解決!

+0

對我而言並不完全適用 - 但很簡單,可以放棄並重新創建OLE DB來解決問題。 –

+0

如果我沒有記錯,我可能會刪除連接並重新添加連接,然後再取消選中該複選框並重新檢查。 –

+0

爲我工作,謝謝+1 – Vladislav

0

糾正我,如果我錯了,但我發現從源獲取數據時單擊預覽按鈕導致錯誤的長度設置爲列,尤其是字符串。
這可能是因爲長度是從預覽數據得到的。因此,更好的做法是在選擇源表後單擊Source-dialog中的Columns-tab。主要是使用ODBC源的情況。

1

當向需要由現有SSIS包處理的表添加新列時,我經常遇到錯誤「錯誤輸出沒有相應的輸出」。此錯誤附帶一條錯誤消息,指出「值不在預期範圍內」。

新添加的列需要由現有的SSIS包處理。預期的行爲是SSIS將認識到有一個新列,並在要處理的OLEDB源任務SSIS的列頁上選擇此列。但是,在修改表格後第一次打開OLEDB源任務時,我得到了兩次以下錯誤消息:「值不在預期範圍內」。打開編輯器和打開編輯器的Columns頁面時出現錯誤消息。在OLEDB源任務的高級編輯器內,新列出現在OLEDB源輸出列樹中,但不出現在OLEDB源錯誤輸出列樹中。這是錯誤消息的實際潛在問題。不幸的是,似乎沒有辦法手動添加缺失列。

要解決此問題,請按Jeff所述,刪除並重新添加正常編輯器的Columnns頁上新添加的列。

可能值得一提的是,OLEDB Source任務的數據源是一個修改後的MDS視圖。 Microsoft CRM Dynamics也使用視圖。這導致了我的結論,即在修改數據類型或添加/刪除列時,將視圖用作數據源可能會產生上述錯誤之一。

相關主題:How to fix SSIS : "Value, does not fall within expected range"?

所描述的變通辦法是指到Visual Studio 2008版本9.0.30729.4462 QFE與Mircorsoft.NET Framework 3.5 SP1中。數據庫是SQL Server 2008 R2(SP2)。