문제

XML 매개 변수가 XML 매개 변수를 다음과 같이 분산 된 쿼리로 만족 시켰습니다 (Windows 2003).

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 행 1 XML 데이터 유형은 다음과 같이 지원되지 않습니다. 원격 호출에 대한 매개 변수입니다.

내 질문 : XML 매개 변수를 분산 쿼리로 허용하거나 2012의 XML 매개 변수가 더 이상 지원하지 않으려면 허가 또는 TickBox (패싯?)가 있습니까?

참고 : 테이블에는 DataType 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