2017-06-26 10 views
0

SQLプロシージャ内からXMLファイルを作成する際に問題があります。 XMLが作成され、正しいフォルダに配置されます。私はXMLSpyの中のファイルを開いたとき、それは次のようなエラー言うが、私はメモ帳でXMLファイルを開くとSQL - XMLを作成する - Unicode UTF-8を設定する方法

Your file contains 3 character(s) that should not be present in a file using the Unicode UTF-8 encoding... The offending characters are è (0xE8), ü (0xFC), é (0xE9)

を++と(上部のメニューエンコーディングを経由して)エンコーディングをチェックし、それがANSIであるといないと言いますUTF-8で

私の質問は、どうすればUTF-8に変わるのですか?助言がありますか? 私の手順のコードは以下の見つけることができます:

@File  VARCHAR(2000) // parameter 
AS 

BEGIN 
DECLARE @OLE   INT 
DECLARE @FileID   INT 

EXECUTE sp_OACreate 'Scripting.FileSystemObject', @OLE OUT 

EXECUTE sp_OAMethod @OLE, 'OpenTextFile', @FileID OUT, @File, 8, 1 

DECLARE @Text XML 
SET @Text = (SELECT TOP(1) [xml] from VW_WARP_LEVERANCIERS_XML)  

EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, @Text 

EXECUTE sp_OADestroy @FileID 
EXECUTE sp_OADestroy @OLE 

END 

EDIT 1

は、ASCIIの代わりに、ユニコード(狼によって以下示唆されているように)にエクスポート、私のコードを変更しましたが、これは役立ちませんでしたあまりにも。しかし、ここにコードの一部があります。

DECLARE @OLE   INT 
DECLARE @FileID   INT 

EXECUTE sp_OACreate 'Scripting.FileSystemObject', @OLE OUT 

EXECUTE sp_OAMethod @OLE, 'CreateTextFile', @FileID OUT, @File, 2, False 

DECLARE @Text XML 
SET @Text = (SELECT TOP(1) [xml] from VW_WARP_LEVERANCIERS_XML)  

EXECUTE sp_OAMethod @FileID , 'Write', Null, @Text 
EXECUTE sp_OAMethod @FileID , 'Close' 


EXECUTE sp_OADestroy @FileID 
EXECUTE sp_OADestroy @OLE 

END 

答えて

1

別の方法で解決策が見つかりました。 (私が見つけたウェブサイトを覚えていない) 以下のコードを見てください。このコードは、ファイルをUTF-8-BOMエンコーディングでエクスポートします。

@File  VARCHAR(2000) 
AS 

BEGIN 

DECLARE @OLE   INT 

EXECUTE sp_OACreate 'ADODB.Stream', @OLE OUTPUT 

DECLARE @Text XML 
SET @Text = (SELECT TOP(1) [xml] from VW_WARP_LEVERANCIERS_XML)  
DECLARE @Converted NVARCHAR(MAX) 
SET @Converted = CONVERT(nvarchar(MAX), @Text) 

EXECUTE sp_OASetProperty    @OLE, 'Type',    2       --1 = binary, 2 = text 
EXECUTE sp_OASetProperty    @OLE, 'Mode',    3       --0 = not set, 1 read, 2 write, 3 read/write 
EXECUTE sp_OASetProperty    @OLE, 'Charset',   'UTF-8'      --'ISO-8859-1' 
EXECUTE sp_OASetProperty    @OLE, 'LineSeparator', 'adLF' 
EXECUTE sp_OAMethod     @OLE, 'Open' 
EXECUTE sp_OAMethod     @OLE, 'WriteText',  NULL,  @Converted  --text method 

--Commit data and close text stream 
EXECUTE sp_OAMethod     @OLE, 'SaveToFile',  NULL,  @File, 2 --1 = notexist 2 = overwrite 
EXECUTE sp_OAMethod     @OLE, 'Close' 
EXECUTE sp_OADestroy     @OLE 

EXECUTE sp_OADestroy @OLE 

END 
0

一般に、SQL ServerはUTF-8を単独でサポートしていません。しかし、私はFSOについては分かりません。

OpenTextFile文書には、ファイル形式(ASCIIまたはUnicode)を指定できることが記載されています。試してみてください:

EXECUTE sp_OAMethod @OLE, 'OpenTextFile', @FileID OUT, @File, 8, 0; 

これはあなたにASCIIファイル形式を与えるはずです。

+0

ありがとうございました! ASCIIに書き込むと、同じエラーが表示されます。 "1"の代わりに "0"を追加するだけで助けにはならなかったので、私は少し違っていました(エラーなしでファイルを書き出しませんでした)。 仕事をしたasciiに書き込むコードは上に示されています – Dennis

関連する問題