分散クエリへのXMLパラメータ - SQL 2005とSQL 2012の差
-
26-09-2020 - |
質問
私は、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' ).
はたくさんの落とし穴があります。これは
所属していません dba.stackexchange