2013-04-26 10 views
-1

У меня есть таблица с только 1 основным столбцом (nvarchar), как в дизайнере, она помечена как первичный ключ и не допускает null. Но каким-то образом в этой таблице есть строка с пустым значением ключа, она, конечно, не является нулевой и не дублирует никакие другие строки в столбце первичного ключа, и не происходит никакого конфликта или нарушения.Почему столбец первичного ключа пуст в SQLite?

Однако, насколько я знаю, такое значение (пустое) недопустимо для первичного столбца SQL Server. Интересно, есть ли возможность включить его, чтобы он работал правильно. Или мне нужно проверить значение самостоятельно через ограничение CHECK или прямо в коде C# (перед обновлением).

Ваша помощь будет высоко оценена. Благодаря!

ответ

2

«Пустая строка» - это строка с длиной нуля. Это НЕ NULL, поэтому он не нарушает нулевую проверку. Это, безусловно, допустимое значение для столбца первичного ключа на основе символов в SQL Server. Если пустое значение строки не разрешено бизнесом, ограничение проверки было бы лучшим способом реализовать это как бизнес-правило. Таким образом, клиенты, которые могут не знать о правиле, не могут его нарушить.

Этот код работает без нарушений в SQL Server, я просто проверил его, чтобы быть уверенным.

create table TestTable (
    myKey varchar(10) primary key, 
    myData int 
) 
GO 

insert TestTable 
select '', 1 
+0

Ну, тестирование с использованием кода - это не то, что я сделал, я тестировал с помощью конструктора, и он обнаружил диалоговое окно с ошибкой. Если это так, это не отличается от SQL Server. Однако как насчет опции или настройки? (прежде чем рассматривать проверку ограничения или другие проверки данных). Благодаря! –

+0

Существует опция, которая заставляет NULL обрабатываться как пустую строку в операциях конкатенации строк, но ничего не похожее на таблицы. Вероятно, редактор таблиц, который вы используете, преобразует пустые значения в null перед отправкой обновления - это поведение инструмента, поэтому я не уверен, как это исправить. Вы можете создать сценарий своего обновления из инструмента и посмотреть, что такое SQL. Имейте в виду, что все эти инструменты работают, отправляя простой старый SQL на сервер. Если вы можете каким-то образом перехватить (например, с профилировщиком), вы можете увидеть, что он делает. – Jasmine

+0

О, BTW - использование дизайнеров действительно повредит вам при изучении SQL - вам нужно научиться ручному SQL-коду. В этот момент дизайнеры становятся более или менее бесполезными, потому что вы можете кодировать быстрее, чем вы можете передвигаться. – Jasmine

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