在我們的數據庫中,我們有兩個鏈接在一起的表格。 Table A
有一個主鍵,Table B
有一個外鍵返回到Table A
的主鍵字段。這是一對多的關係。SQL Server 2008r2外鍵允許空間
這裏是我的問題:
如果我通過添加文本結束後的空間編輯Table B
的外鍵字段,它不會阻止。這會造成重複值的錯覺。 (防止添加任何其他字符)。
我怎樣才能確保這不會再發生,因爲它會弄亂我們的報告?
在我們的數據庫中,我們有兩個鏈接在一起的表格。 Table A
有一個主鍵,Table B
有一個外鍵返回到Table A
的主鍵字段。這是一對多的關係。SQL Server 2008r2外鍵允許空間
這裏是我的問題:
如果我通過添加文本結束後的空間編輯Table B
的外鍵字段,它不會阻止。這會造成重複值的錯覺。 (防止添加任何其他字符)。
我怎樣才能確保這不會再發生,因爲它會弄亂我們的報告?
這看起來很奇怪,但這是字符串比較應該如何工作的,正如由SQL-92標準定義並由SQL Sever實現的那樣。在我學習這個痛苦的教訓之前,我被一些神祕的蟲子咬了。請參閱Microsoft支持:How SQL Server Compares Strings with Trailing Spaces。
Oracle不會以這種方式比較字符串,這是人們從Oracle遷移到SQL Server的常見問題。
如果這只是影響您的報告中,我建議你修剪SELECT
子句中的字符串:
SELECT LTRIM(RTRIM(MyColumn)) FROM MyTable
,而'選擇'條款在報告中會很好,但這不是唯一受影響的事情。這個問題與db的參照完整性混淆。 – 2014-10-01 12:48:39
從SQL Server的角度來看,參照完整性沒有問題,因爲這些值是相等的。 SQL是70年代開發的IBM產品。與其他(着名)IBM語言COBOL一樣,它並不關心太空間。我擔心在SQL Server中無法擺脫它。 – 2014-10-01 13:22:57
什麼是表A的主鍵的數據類型? – David 2014-09-30 16:11:28
那麼'string'和'string'是不一樣的值。 – DavidG 2014-09-30 16:17:08
數據類型是nvarchar。另外,如果'表A'中的值應該限制'表B'中輸入的內容,那麼它如何讓'字符串'被輸入'表B'? – 2014-09-30 18:27:15