Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql XML路径中未使用的空间?_Sql_Sql Server_Xml - Fatal编程技术网

Sql XML路径中未使用的空间?

Sql XML路径中未使用的空间?,sql,sql-server,xml,Sql,Sql Server,Xml,我有一个表Category,有三列ID(int)、Name(nchar 150)、Description(nchar 500),当我尝试使用此sql查询SELECT*FROM[Category]FOR xml PATH转换为xml时,我得到以下结果: <idCat>1</idCat> <CatName>Cat 1 ... 100 space character </CatName> <CatDesc>Desc 1 ... 500 spa

我有一个表
Category
,有三列
ID(int)、Name(nchar 150)、Description(nchar 500)
,当我尝试使用此sql查询
SELECT*FROM[Category]FOR xml PATH
转换为xml时,我得到以下结果:

<idCat>1</idCat>
<CatName>Cat 1 ... 100 space character </CatName>
<CatDesc>Desc 1 ... 500 space character </CatDesc>
1
第一类。。。100空格字符
描述1。。。500空格字符

问题在于源表定义

实际上,您的名称和描述显然不是固定长度的,因此不应该使用固定长度的数据类型。它们将用尾随空格填充,以填充声明的长度。这意味着,即使实际值要短得多,这两列的每一行也要消耗1300字节

nchar
列更改为
nvarchar
,并通过在两列上使用
rtrim
运行更新语句来删除已添加的尾随空格

UPDATE Category 
SET Name = RTRIM(Name), Description = RTRIM(Description)

问题在于源表定义

实际上,您的名称和描述显然不是固定长度的,因此不应该使用固定长度的数据类型。它们将用尾随空格填充,以填充声明的长度。这意味着,即使实际值要短得多,这两列的每一行也要消耗1300字节

nchar
列更改为
nvarchar
,并通过在两列上使用
rtrim
运行更新语句来删除已添加的尾随空格

UPDATE Category 
SET Name = RTRIM(Name), Description = RTRIM(Description)

为什么要使用
nchar
而不是
nvarchar
?如果我没有错,在传递到xml路径的
之前,您必须清除所有空格字符。。别无选择。。用
char(n)
替换
函数替换空格characters@Pரதீப் <代码>RTRIM
。虽然修复源表的架构似乎是有保证的。@Pரதீப் 它们是添加到上的空格字符,可以填充到150和500个字符。请使用
Description=rtrim(Description)
运行更新,然后再试一次为什么要使用
nchar
而不是
nvarchar
?如果没有错,在传递到
for xml path
之前,您已经清除了所有空格字符。。别无选择。。用
char(n)
替换
函数替换空格characters@Pரதீப் <代码>RTRIM
。虽然修复源表的架构似乎是有保证的。@Pரதீப் 这是我第一次使用
For XML Path
子句,我一直认为nchar或nvarchar可以设置最大长度,但使用的空间将仅是实际使用的空间。非常感谢您抽出时间这是我第一次为XML Path使用
子句,我一直认为nchar或nvarchar可以设置最大长度,但使用的空间将仅是实际使用的空间。非常感谢您抽出时间D