簡體   English   中英

如何處理'sp_xml_preparedocument'中的無效字符(SQL Server 20188 R2)

[英]How to handle invalid character in 'sp_xml_preparedocument' (SQL Server 20188 R2)

我有一個存儲過程,正在使用sp_xml_preparedocument處理XML數據。 但是由於某些無效字符,例如

Ex: 1. INGENIERÍA
    2. Engineer'

在XML數據中,SQL引發異常,例如“在文本內容中可以找到無效字符”。

附加的異常的屏幕截圖

我的存儲過程看起來像

    DECLARE @idoc INT
    DECLARE @doc XML
    SET @doc = @DocElements -- @Docelements will have XML data
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

    SELECT BadgeNo FROM OPENXML (@idoc, '/DocumentElement/PEScoreUpdate',2) WITH(BadgeNo  VARCHAR(50)))AND
    ASRYEAR=YEAR(GETDATE()) And IsPlanDeleted<>1
    EXEC sp_xml_removedocument @idoc 

Sampel XML數據

  <DocumentElement>
  <PEScoreUpdate>
    <Badge_x0020_No>105731</Badge_x0020_No>       
    <Last_x0020_Name>Vijaya Kumar</Last_x0020_Name>
    <First_x0020_Name>Sanjay Kumar</First_x0020_Name>
    <BOC>Onshore E&amp;C</BOC>
    <Emp_x0020_Class>White Collar</Emp_x0020_Class>
    <Site>INGENIERÍA PROJECT     Secondment</Site>       
  </PEScoreUpdate>
</DocumentElement>

我從具有數千個數據的excel工作表中獲取此XML數據,因此,實際上不可能搜索無效文本並手動進行更正。 任何人都指導我如何在SQL過程中處理此無效的char。 有什么辦法可以替換這個無效字符,但是我正在處理成千上萬的數據。 會影響性能嗎? 有人引導我。 提前致謝

有一點是, FROM OPENXML (與SP一起准備和刪除商品)已經過時了,不應再使用(存在罕見的例外)。

對您的實際問題:

我很確定,此問題與FROM OPENXML無關,也與sp_xml_preparedocument無關。 您沒有顯示如何傳遞XML。 但是-可以想象-您是在字符串級使用VARCHAR變量(或使用XML字面量)執行此操作。嘗試使用NVARCHAR或在字面量之前放置前導N

如果我說得對,您可以在這里找到詳細信息: https : //stackoverflow.com/a/42683643/5089204

更新如何今天閱讀XML ...

嘗試像這樣讀取您的XML

DECLARE @doc XML=
N'<DocumentElement>
  <PEScoreUpdate>
    <Badge_x0020_No>105731</Badge_x0020_No>       
    <Last_x0020_Name>Vijaya Kumar</Last_x0020_Name>
    <First_x0020_Name>Sanjay Kumar</First_x0020_Name>
    <BOC>Onshore E&amp;C</BOC>
    <Emp_x0020_Class>White Collar</Emp_x0020_Class>
    <Site>INGENIERÍA PROJECT     Secondment</Site>       
  </PEScoreUpdate>
</DocumentElement>';

SELECT u.value(N'(Badge_x0020_No)[1]',N'int') AS Badge_x0020_No
      ,u.value(N'(First_x0020_Name)[1]',N'nvarchar(max)') AS First_x0020_Name
      ,u.value(N'(BOC)[1]',N'nvarchar(max)') AS BOC
      ,u.value(N'(Emp_x0020_Class)[1]',N'nvarchar(max)') AS Emp_x0020_Class
      ,u.value(N'(Site)[1]',N'nvarchar(max)') AS [Site]
FROM @doc.nodes(N'/DocumentElement/PEScoreUpdate') AS A(u)

更新2

您的代碼將/DocumentElement/BasicInformation顯示為XPath ,但是這不會顯示在XML中嗎?

此外,元素名稱中的_x0020_來自Excel列名稱中的空白。

在很多地方,您的問題可能來自...

暫無
暫無

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

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