質問

私は、XMLパラメータをこのような分散クエリに許可する古いSQL2005エンタープライズデータベースを継承しました:

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データ型はサポートされていません リモートコールへのパラメータ。

私の質問: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'
)
.

はたくさんの落とし穴があります。これは

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top