2014-09-30 7 views
0

В нашей базе данных у нас есть две таблицы, связанные друг с другом. Table A имеет первичный ключ, а Table B имеет внешний ключ до Table A. Это отношения «один ко многим».Внешний ключ SQL Server 2008r2, позволяющий пространство

Вот мой вопрос:

Если я редактировать Table B «s ссылочное поле, добавив пробел после окончания текста, это не мешает это. Это создает иллюзию дублирования значений. (добавляется любой другой символ).

Как я могу убедиться, что это не повторится, так как это испортит нашу отчетность?

+2

Какой тип данных первичного ключа таблицы А-в? – David

+1

Строка 'string' и' string' не одинаковы. – DavidG

+0

Тип данных - nvarchar. Кроме того, если значения в таблице «A» должны ограничивать введенное в «Таблице B», то как это сделать, чтобы «строка» была введена в «Таблицу B»? –

ответ

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. –

+0

С точки зрения SQL Server, нет проблемы с ссылочной целостностью, поскольку эти значения равны. SQL - продукт IBM, разработанный в 70-х годах. Подобно другому (в) знаменитому языку IBM, COBOL, он не заботится о пространстве. Я боюсь, что этого не будет в SQL Server. –

Смежные вопросы