避免在插入时留下空格

时间:2014-07-18 11:27:08

标签: 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-6CB0-43AD-9DD5-5FBFFC60B313', '70667244-6F03-4113-930E-BF66CF1C29EE', 'MX7A386CHGR5WW', 'BE0000000000000000000162')

Code列的长度为36,这意味着SQL Server会向MX7A386CHGR5WW添加尾随空格。

如何避免这种行为? (code列可以在10到36个字符之间变化)

2 个答案:

答案 0 :(得分:2)

- SQL Server执行 NOT 将任何尾随空格添加到定义为nvarchar的列中!

它会存储与传入的字符完全相同的字符 - 不再存在!

charnchar数据类型将填充到定义的长度 - 但 NOT (n)varchar类型!

如果您在插入后运行此查询,则会发现您的陈述错误:

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

您会看到14 Code列的长度,并在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

答案 1 :(得分:0)

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