簡體   English   中英

XML到NVarchar(MAX)失敗

[英]XML to NVarchar(MAX) failing

我有一個存儲過程,該過程返回2個結果集,每個結果集都包含一個單元格。 在第一個中,我返回一個xml,第二個中返回一個datetime值。

我嘗試從鏈接服務器訪問此SP(SP_XML),但失敗,提示鏈接服務器上不允許XML。 所以我寫了一個包裝器(SP_NChar),如下所示。 問題是我只需要跨鏈接服務器的XML結果集,而不需要datetime結果集(無論是否收到它都沒關系)

CREATE PROCEDURE SP_NChar
AS  
BEGIN  
 -- TO STORE PROC RESULT
 DECLARE @XML_RESULT TABLE(result XML)  
 BEGIN TRY  

  INSERT INTO @XML_RESULT(result) EXEC SP_XML
  SELECT CAST(result AS NVARCHAR(MAX)) FROM @XML_RESULT   

 END TRY  
 BEGIN CATCH

  -- This block will get executed because one is XML and another is Datetime and it will fail in try part
  PRINT 'Do Nothing'  
  select * from @XML_RESULT  

 END CATCH  
END

它可以在我的開發環境上按預期工作,但在生產環境下卻無法工作,任何想法都可能出問題。

僅用於測試目的SP_XML

CREATE procedure SP_XML
as
BEGIN
    select CAST('<ROOT>2</ROOT>' AS XML)
    select getdate()
END

嘗試像這樣修改您的SP:

CREATE PROCEDURE [dbo].[SP_NChar]
AS  
BEGIN  
 -- TO STORE PROC RESULT
    DECLARE @XML_RESULT TABLE(result XML)  
    BEGIN TRY  
        INSERT INTO @XML_RESULT(result) EXEC SP_XML
        SELECT CAST(result AS NVARCHAR(MAX)) FROM @XML_RESULT   
    END TRY  
    BEGIN CATCH
        DECLARE @ErrorMessage NVARCHAR(4000);
        DECLARE @ErrorSeverity INT;
        DECLARE @ErrorState INT;
        SELECT 
            @ErrorMessage = ERROR_MESSAGE() + '. В строке: ' + CAST(ERROR_LINE() AS NVARCHAR),
            @ErrorSeverity = ERROR_SEVERITY(),
            @ErrorState = ERROR_STATE();

        IF @@TRANCOUNT > 0
            ROLLBACK TRANSACTION;

        RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);
        RETURN;
    END CATCH  
END

並且您將得到錯誤:

Msg 50000, Level 16, State 2, Procedure SP_NChar, Line 28
Operand type clash: datetime is incompatible with xml

在SP_XML中,您嘗試返回datetime,但無法將其轉換為XML。 我建議您修改如下代碼:

CREATE PROCEDURE [dbo].[SP_XML]
AS
BEGIN
    SELECT CAST('<ROOT>2</ROOT>' AS XML)
    SELECT CAST('<date>' + CONVERT(nvarchar(MAX),getdate()) + '</date>' AS XML)
END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM