Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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 避免在插入时插入空格_Sql_Sql Server 2008_Nvarchar - Fatal编程技术网

Sql 避免在插入时插入空格

Sql 避免在插入时插入空格,sql,sql-server-2008,nvarchar,Sql,Sql Server 2008,Nvarchar,在SQL Server 2008中,我创建了下表: CREATE TABLE [Items]( [ID] [uniqueidentifier] NOT NULL, [Stock_ID] [uniqueidentifier] NOT NULL, [Code] [nvarchar](36) NOT NULL, [RFCODE] [nvarchar](24) NOT NULL ) 插入新行时: insert into Items values ('34438913

在SQL Server 2008中,我创建了下表:

CREATE TABLE [Items](
    [ID] [uniqueidentifier] NOT NULL,
    [Stock_ID] [uniqueidentifier] NOT NULL,
    [Code] [nvarchar](36) NOT NULL,
    [RFCODE] [nvarchar](24) NOT NULL
) 
插入新行时:

insert into Items 
values ('34438913-6CB0-43AD-9DD5-5FBFFC60B313', '70667244-6F03-4113-930E-BF66CF1C29EE', 'MX7A386CHGR5WW', 'BE0000000000000000000162')
code
列的长度为36,这意味着SQL Server在
MX7A386CHGR5WW
中添加了尾随空格


如何避免这种行为?(
code
列可以从10到36个字符不等)

code
列的类型为
nvarchar
,这意味着最多允许36个字符。如果输入长度小于36,它将不会填充,这是
nchar
将要做的。

-SQL Server不会向定义为
nvarchar
的列添加任何尾随空格

它将存储与您传入的字符数相同的字符数-不再存储

char
nchar
数据类型将按照定义的长度进行填充-但不是
(n)varchar
类型

如果在插入后运行此查询,您将看到您的语句是错误的:

SELECT 
    *, LEN(Code), '[' + Code + ']'
FROM Items
您将看到
code
列的长度
14
,在
code
周围放上方括号清楚地显示未添加任何尾随空格

如果向表中添加类型为
NCHAR(36)
的列

ALTER TABLE Items 
ADD CodeFixed NCHAR(36)
然后将其值设置为
MX7A386CHGR5WW

UPDATE Items
SET CodeFixed = 'MX7A386CHGR5WW'
WHERE ID = '34438913-6CB0-43AD-9DD5-5FBFFC60B313'
然后,当您检查时,您将看到
nchar(36)
实际上是用空格填充到定义的最大长度:

SELECT 
    LEN(Code), '[' + Code + ']',
    '[' + CodeFixed + ']'
FROM Items

否-SQL Server不会向定义为
nvarchar
的列添加任何尾随空格!!它将存储与您传入的字符数相同的字符数-不再存储!
char
nchar
数据类型将按照定义的长度进行填充,但
(n)varchar
类型不会!据我所知,SQL将使用2个字节来存储列长度,然后每个字符使用2个字节(nvarchar)或每个字符使用1个字节(varchar)。没有填充。您如何得出长度为36的结论?通过查看表定义,或执行
LEN(code)
?代码中的某个地方有一个bug,这里没有显示。