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