Sql server XML参数映射中出错

Sql server XML参数映射中出错,sql-server,ssis,Sql Server,Ssis,我有一个返回xml的存储过程。此结果存储在SSIS中的变量(对象类型)中。此变量作为参数传递给执行sql任务中的另一个存储过程。参数映射作为varchar完成。我得到以下错误: [Execute SQL Task]错误:执行查询“exec uspDeleteLivereCordAfterArchive?”失败,出现以下错误:“将结果提取到类型为(DBTYPE_STR)的变量时出错” 注意:我确信存储过程中没有任何错误,因为它在单独测试时运行良好 此参数映射中有什么错误,如何更正 我搜索了很多,但

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

[Execute SQL Task]错误:执行查询“exec uspDeleteLivereCordAfterArchive?”失败,出现以下错误:“将结果提取到类型为(DBTYPE_STR)的变量时出错”

注意:我确信存储过程中没有任何错误,因为它在单独测试时运行良好

此参数映射中有什么错误,如何更正

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

变量

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

套餐

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

参数映射


到目前为止,我无法让它与执行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
存储过程Psuedo代码

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

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