我继承了一个旧的SQL2005企业数据库(在Windows 2003上),允许XML参数到分布式查询,如下所示:

exec sp_executesql 'exec [server].[database].dbo.sproc @Id=@Id,@PItems=@PItems output','@PId bigint, @PItems xml output', valueOf@PId, valueOf@PItems output
.

在SQL2012中不再有效,错误说:

msg 9512,级别16,状态1,行1 XML数据类型不受支持 远程呼叫的参数。

我的问题:是否有许可或标记箱(Facet?),以允许XML参数分布到分布式查询或2012年不再支持它?

注意:表格没有任何数据专栏XML。只有参数是XML。

有帮助吗?

解决方案 2

我已经找到了解决问题的解决方案。我的“服务器名称”一部分存储过程正在数据库中的列中加载,其中包含端口号(因为它是命名实例),因此它读取

[Servername\Instance,Port].[database]....
.

但是当我删除它工作的端口时。在下面的演示。

USE [master]
GO

CREATE DATABASE TestDatabase
go

ALTER DATABASE TestDatabase SET COMPATIBILITY_LEVEL = 90
GO

USE [TestDatabase]
go

CREATE TABLE [Table_A]([MyColumn] [varchar](100) NOT NULL)
go

INSERT INTO Table_A (MyColumn)
VALUES ('this is some text')
go


CREATE PROCEDURE [dbo].[GetSomeText] 
    @P_XmlParameter xml output
AS
BEGIN
    SET  @P_XmlParameter = (SELECT  MyColumn
                            FROM Table_A                                
                            FOR XML RAW('xmlrow'), ROOT('xmldoc'))
END
GO


CREATE PROCEDURE [dbo].[CallDistributedSproc] 
    @XmlParam xml output
AS
BEGIN

    declare @sql nvarchar(2000)
    declare @sqlparam nvarchar(2000)

    set @Sql = 'exec [' + @@SERVERNAME + '].[TestDatabase].dbo.GetSomeText @P_XmlParameter=@XmlParam output'

    set @SqlParam = '@XmlParam xml output'

    print @sql

    exec sp_executesql @Sql, @SqlParam, @XmlParam output
END
GO


declare @XmlParam xml
set @XmlParam= null
exec CallDistributedSproc @XmlParam=@XmlParam output
select @XmlParam
.

其他提示

它不受支持,但你可以绕过它..

select * from openquery(
 LinkedServerName,
 'exec [database].dbo.sproc @Id=@Id,
                       @PItems=@PItems output'',''
                       @PId bigint, 
                       @PItems xml output'', 
                       valueOf@PId, 
                       valueOf@PItems output'
)
.

有很多陷阱。哪个井在这里解释了,因为您在2012年时,您将想调查执行远程查询使用结果集。一些版本的这一点。

SELECT * FROM OPENQUERY(LinkedServerName, 
          'EXEC msdb..sp_helpindex sysjobs
           WITH RESULT SETS ((index_name        sysname,
                              index_description nvarchar(500),
                              index_keys        nvarchar(500)))')
.

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top