2015-11-13 142 views
0

我有一个返回xml的存储过程。此结果存储在SSIS中的变量(类型为object)中。该变量作为参数传递给execute sql任务中的另一个存储过程。参数映射完成为varchar。我收到以下错误:XML参数映射错误

[Execute SQL Task] Error: Executing the query "exec uspDeleteLiveRecordAfterArchival ?" failed with the following error: "An error occurred while extracting the result into a variable of type (DBTYPE_STR)".

注:我肯定没有错,在存储过程,因为它单独测试时工作正常。

这个参数映射有什么问题,以及如何解决这个问题?

我搜索了很多,但我没有看到任何有用的答案。

可变

enter image description here

enter image description here

参数映射

enter image description here

+1

我不认为SSIS可以隐式转换的对象变量为varchar。您能否将第一个过程中的XML存储在字符串变量中而不是对象中? –

回答

0

到目前为止我无法使用Execute SQL任务。现在我从一个脚本任务调用存储过程并分配给一个变量,直到我得到一个更好的解决方案。

脚本任务

Public Sub Main() 

    Dim tableName As String = Dts.Variables("User::CurrentTable").Value.ToString() 
    Dim sourceConnection As SqlConnection 
    Dim destinationConnection As SqlConnection 

    Try 

     Dim cmSource As ConnectionManager 
     cmSource = Dts.Connections("ADOSourceConnection") 
     sourceConnection = DirectCast(cmSource.AcquireConnection(Dts.Transaction), System.Data.SqlClient.SqlConnection) 

     Dim cmDestination As ConnectionManager 
     cmDestination = Dts.Connections("ADOACIConnection") 
     destinationConnection = DirectCast(cmDestination.AcquireConnection(Dts.Transaction), System.Data.SqlClient.SqlConnection) 

     Using destinationConnection 

      Dim cmd As New SqlCommand() 
      cmd.Connection = destinationConnection 
      cmd.CommandType = CommandType.StoredProcedure 
      cmd.CommandText = "uspGetIncompleteMoveFromArchival" 
      cmd.Parameters.AddWithValue("@TableName", tableName) 

      Dim result As String = Convert.ToString(cmd.ExecuteScalar()) 
      Dts.Variables("User::IncompleteMoveXML").Value = result 

      'Release Connection' 
      cmSource.ReleaseConnection(sourceConnection) 
      cmDestination.ReleaseConnection(destinationConnection) 

      'Success' 
      Dts.TaskResult = Dts.Results.Success 

     End Using 
    Catch ex As Exception 

     Dim exceptionVariable As Microsoft.SqlServer.Dts.Runtime.Variables = Nothing 
     Dts.VariableDispenser.LockOneForWrite("User::ScriptException", exceptionVariable) 
     exceptionVariable("User::ScriptException").Value = ex.Message 
     exceptionVariable.Unlock() 
     Dts.Events.FireError(-1, "Task Name", ex.Message, String.Empty, 0) 
     Dts.TaskResult = Dts.Results.Failure 

    End Try 


End Sub 

存储过程的伪代码

DECLARE @Result XML 
    SELECT @Result = 
    (
     SELECT 
      'SKULocationsSnapShot' AS '@tableName', 
      (

       SELECT CONVERT(VARCHAR(20), SnapShotID) AS SnapShotID, 
         CONVERT(VARCHAR(20), LocationID) AS LocationID 
       FROM dbo.SKULocationsSnapShot CurrentTable (NOLOCK)  
       WHERE IsMoveComplete = 'N' 
       FOR XML PATH('CurrentRow'), TYPE 
      ) 
     FOR XML PATH('root') 
    ) 

    SELECT CAST(
        @Result 
        AS VARCHAR(MAX) 
       ) AS IncompleteMoveXML