我遇到的问题是,如果值包含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)
上有没有人知道是否有用于防止这种情况的设置或其他功能。 我能想到的一个选项是删除选择中的回车符和换行符:
SELECT @xmldata = REPLACE(REPLACE(REPLACE(REPLACE(xmldata, CHAR(13) + CHAR(10), ''), CHAR(10) + CHAR(13), ''), CHAR(13), ''), CHAR(10), '')
但希望可能有其他功能或设置来覆盖行为。
答案 0 :(得分: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
看起来对我来说。