1

私が抱えている問題は、値に値が含まれている場合 (末尾ではない)、a の長さがvarchar正しく返されないことです。CR/LF

たとえば、次のクエリ スニペットは次のとおりです。

データは次のようなものです。

<xml><name>Name[CR/LF] Name</name></xml>

次のようなクエリ:

DECLARE @myid as INT
DECLARE @xmldata as VARCHAR(8000)
SET @myid = 1
SELECT @xmldata = xmldata FROM mytable WHERE id=@myid

PRINT 'The length is ' + CAST(LEN(@xmldata) AS VARCHAR(6))
PRINT 'Data:'
PRINT @xmldata

出力します:

The length is 15
Data:
<xml><name>Name[CR/LF] Name</name></xml>

LEN 関数は長さとして 35 を返すと思いますか?

これは SQL Server 2000 SP4 (8.00.2065) 上にあります。

これを防ぐために使用する設定または別の機能があるかどうかは誰にもわかりません。私が考えることができる1つのオプションは、選択でキャリッジリターンとラインフィード文字を削除することです:

SELECT @xmldata = REPLACE(REPLACE(REPLACE(REPLACE(xmldata, CHAR(13) + CHAR(10), ''), CHAR(10) + CHAR(13), ''), CHAR(13), ''), CHAR(10), '') 

しかし、動作をオーバーライドする別の機能または設定があることを望んでいました。

4

1 に答える 1

0

以下は、SQL Server 2008 R2 で 35 (33 ではなく) を 2 回返します。

DECLARE @xmldata as VARCHAR(8000) 
SELECT @xmldata = '<xml><name>Name' + CHAR(13) + CHAR(10) + ' Name</name></xml>'
--                 000000000111111         1          1      112222222222333333
--                 123456789012345         6          7      890123456789012345
PRINT LEN(@xmldata)
print DataLength(@xmldata)
PRINT @xmldata 

それは私には正しく見えます。

于 2012-08-01T14:46:17.480 に答える