2014-09-30 61 views
0

在我们的数据库中,我们有两个链接在一起的表格。 Table A有一个主键,Table B有一个外键返回到Table A的主键字段。这是一对多的关系。SQL Server 2008r2外键允许空间

这里是我的问题:

如果我通过添加文本结束后的空间编辑Table B的外键字段,它不会阻止。这会造成重复值的错觉。 (防止添加任何其他字符)。

我怎样才能确保这不会再发生,因为它会弄乱我们的报告?

+2

什么是表A的主键的数据类型? – David 2014-09-30 16:11:28

+1

那么'string'和'string'是不一样的值。 – DavidG 2014-09-30 16:17:08

+0

数据类型是nvarchar。另外,如果'表A'中的值应该限制'表B'中输入的内容,那么它如何让'字符串'被输入'表B'? – 2014-09-30 18:27:15

回答

0

这看起来很奇怪,但这是字符串比较应该如何工作的,正如由SQL-92标准定义并由SQL Sever实现的那样。在我学习这个痛苦的教训之前,我被一些神秘的虫子咬了。请参阅Microsoft支持:How SQL Server Compares Strings with Trailing Spaces

Oracle不会以这种方式比较字符串,这是人们从Oracle迁移到SQL Server的常见问题。

如果这只是影响您的报告中,我建议你修剪SELECT子句中的字符串:

SELECT LTRIM(RTRIM(MyColumn)) FROM MyTable 
+0

,而'选择'条款在报告中会很好,但这不是唯一受影响的事情。这个问题与db的参照完整性混淆。 – 2014-10-01 12:48:39

+0

从SQL Server的角度来看,参照完整性没有问题,因为这些值是相等的。 SQL是70年代开发的IBM产品。与其他(着名)IBM语言COBOL一样,它并不关心太空间。我担心在SQL Server中无法摆脱它。 – 2014-10-01 13:22:57