1

我遇到的问题是,varchar如果值包含CR/LF值(不是尾随),则不会正确返回 a 的长度。

例如以下查询片段:

数据类似于:

<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) 上

有谁知道是否有设置或其他功能可以用来防止这种情况。我能想到的一个选项是删除选择中的回车符和换行符:

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):

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 回答