【发布时间】:2018-03-04 14:06:46
【问题描述】:
我在 Pfx、Bse 和 Sfx 列上有一个带有唯一键的表。 在插入数据时,在我看来,SQL Server 似乎在内部应用 RTRIM 并导致我的 Sfx 列出现问题,该列在第二行中有一个空格。是否可以防止这种 RTRIM 或我错过了什么?
INSERT INTO Part (Seq, Pfx, Bse, Sfx, Stat, Desc, Cr_date, Cr_User)
SELECT 1 SEQ, '2R83' AS PFX, '6477' BSE, 'AA' SFX, 1 STAT, 'SPLIT MASS FLYWHEEL' DESCR, GETDATE() CR_DT, 'USERID' CR_US
UNION ALL
SELECT 2, '2R83', '6477', 'AA ', 1, 'SPLIT MASS FLYWHEEL', GETDATE(), 'USERID';
错误信息似乎没有修剪数据并保留空间。
违反 UNIQUE KEY 约束“NNMP0672”。重复键值为 (2R83, 6477, AA)
【问题讨论】:
-
您真的需要能够将“AA”和“AA”存储为不同的值吗?这对我来说似乎不是一个好主意。即使您可以说服数据库允许它。将来可能会导致非常令人沮丧的维护问题。
-
好问题。我正在将数据从旧版 oracle DB 迁移到 sql server。还有其他列,例如描述,让我认为应该加载这些数据。希望这是有道理的。
-
@rsreji,SQL Server 在比较字符串值时会忽略尾随空格,因此无论是否存储尾随空格,您都会得到重复的键冲突。
-
@rsreji 如果我遇到这个问题,我会非常怀疑原始记录(带有尾随空格)输入错误。您可以尝试完全按照最初存储的方式加载它,但它可能真正需要的是重复解析数据。
-
是的,我将尝试看看我是否可以努力处理数据。谢谢。
标签: sql sql-server unique-key character-trimming