【问题标题】:Pass XML variable from a stored proc to another stored proc in SQL server将 XML 变量从存储过程传递到 SQL 服务器中的另一个存储过程
【发布时间】:2019-10-11 15:43:42
【问题描述】:

我有 2 个存储过程。

第一个接收一些变量作为输入参数,其中一个是 XML。

在这个过程中,我调用了另一个过程,但动态地像那样。该 proc 处理 XML 以将其插入 DB。

SET @SQL = 'EXEC [' + @ServerIp + '].[List_' + CAST(@AccountId AS VARCHAR) + '].[dbo].[psu_proc_name] @ParameterId = ' + CAST(@ParameterId AS VARCHAR) + ',@MappingFields = ' + @MappingFields

@MappingFields 是第一个过程和第二个过程中的 XML 变量的名称(动态调用)

我在第二个过程(动态)中管理 XML 的处理,但我不知道如何将参数作为 XML 传递给第二个过程。

谢谢

【问题讨论】:

  • 请注意,将长度转换为 varchar 会引起一些心痛。
  • 你的意思是“没有”?

标签: sql sql-server


【解决方案1】:

最好的方法是使用sp_executesql 存储过程,而不是使用简单的exec 命令。请参阅问题EXEC sp_executesql with multiple parameters 中不重复但非常清晰的示例,以便于了解详细信息。

【讨论】:

    【解决方案2】:

    我尝试过类似的方法:

    SET @SQL = N'EXEC [' + @ServerIp + '].[List_' + CAST(@AccountId AS VARCHAR) + '].[dbo].[psu_opensystem_field_mapping_add]'
    EXEC sp_executeSQL @SQL, N'@ParameterId INT, @MappingFields XML' , @ParameterId, @MappingFields
    

    但它说

    Procedure or function 'psu_opensystem_field_mapping_add' expects parameter '@ParameterId', which was not supplied
    

    【讨论】:

    • 从您的 SQL 字符串中删除 EXEC 语句。你的命令应该是EXEC sp_executeSQL @SQL, N'@ParameterId INT, @MappingFields XML' , @ParameterId, @MappingFields,@SQL 变量应该包含 `N'[' + @ServerIp + '].[List_' + CAST(@AccountId AS VARCHAR) + '].[dbo].[psu_opensystem_field_mapping_add]'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    相关资源
    最近更新 更多