Триггер SQL Server для параметра «По умолчанию (newsequentialid ())» не работает с «00000000-0000-0000-0000-000000000000»?

1

В качестве первичного ключа у меня есть элемент Entity with Guid.

Его значением по умолчанию является (newsequentialid()). Поэтому, если я пройду NULL, он будет генерировать Guid.

Теперь я использую эту базу данных с BDC Model Stuff. Проблема в том, что этот автоматически сгенерированный код не пропускает NULL для ID с новыми объектами при создании, вместо этого он использует, вероятно, только new Guid() который составляет 00000000-0000-0000-0000-000000000000. Таким образом, мое ограничение по умолчанию не работает, и я получаю ошибку нарушения ограничения первичного ключа...

Так можно ли поймать эту проблему с помощью триггера? Может быть, сначала проверьте, является ли идентификатор 0000... 0, а затем сгенерирован действительный?

Теги:
sql-server
guid
triggers
bcs

2 ответа

1

Вы можете использовать триггеры, хотя, как указывали другие, это было бы неразумным решением, так как вводит невидимый взлом между кодом и данными. Ваше реальное решение - изменить ORM таким образом, чтобы он не пытался вставлять GUID напрямую, поскольку это база данных.

Поэтому проигнорируйте оставшуюся часть моего ответа.

SqlServer не поддерживает триггеры BEFORE, но вы можете использовать INSTEAD OF TRIGGER
CREATE TRIGGER tSomeTable ON SomeTable ВМЕСТО ВСТАВКИ
В ВИДЕ
НАЧАТЬ
INSERT INTO SomeTable (SomeKey, Name)
ВЫБРАТЬ
CASE WHEN i.SomeKey = '00000000-0000-0000-0000-000000000000'
THEN newid() ELSE i.SomeKey END,
i.Name
ИЗ ВСТАВЛЕННЫХ i;
КОНЕЦ

SqlFiddle здесь

0

Pass Guid.NewGuid() который генерирует действительный Guid.

  • 0
    Да, это будет работать, но в этом случае я не могу изменить его ...
  • 0
    Если вы предоставите свой существующий код, может быть полезно для решения вашей проблемы. Потому что был бы способ установить значение id по коду.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню