ALTER Таблица ПРОВЕРКА ПРОВЕРКИ КОНТРАКТА Ошибка [dубликат]

Хотя это может быть двухлетний вопрос, и хотя ответы в потоке достаточно верны, я не могу удержаться от желания сказать вам, что на самом деле возможно, что анонимный класс реализует интерфейс, хотя для этого требуется немного творческого обмана.

Еще в 2008 году я писал пользовательского LINQ-провайдера для моего тогдашнего работодателя, и в какой-то момент мне нужно было сказать «мои» анонимные классы из других анонимных, что означало, что они реализуют интерфейс что я мог бы использовать для их проверки. То, как мы это решали, было использование аспектов (мы использовали PostSharp ), чтобы добавить реализацию интерфейса непосредственно в IL. Таким образом, на самом деле, позволяя анонимным классам реализовывать интерфейсы выполнимо, вам просто нужно немного свернуть правила, чтобы добраться туда.

8
задан RichardTheKiwi 27 January 2011 в 21:08
поделиться

2 ответа

Создайте столбец, но разрешите NULL. Заполните столбец правильными данными из таблицы внешнего ключа. Измените столбец add not null. Добавьте ограничение внешнего ключа.

15
ответ дан Kjetil Watnedal 15 August 2018 в 14:45
поделиться
  • 1
    Вы можете добавить столбец по умолчанию, а затем скопировать правильные данные, а затем удалить ограничение по умолчанию. Различный путь, такое же количество шагов. Я не думаю, что он получит какой-нибудь «кулер». – mwigdahl 11 March 2010 в 15:11

О некоторых частях ваших вопросов (из года в год):

1.Если вы имеете в виду, что значение по умолчанию было бы настолько умным, и вам не понадобилось бы его менять в будущем, тогда ваш желание ошибочно. почему?

по двум причинам:

  • a) В концепции значения по умолчанию (во всех языках программирования, в DB и т. д. ..) значение по умолчанию не является чем-то, что динамически заменяет значение тем, что вы хотите. Например, Func Sum (a, b, c = 10), в этой ситуации, если вы не введете параметр c, это займет 10, иначе вы должны что-то ввести. поэтому значения по умолчанию являются предсказуемыми и расчетными значениями, а не интеллектуальными значениями.
  • b) Внешние ключи являются чем-то еще более чувствительным, чем необязательный параметр в методе, из-за реляционных значений в RDBMS, так что, конечно, вы должны отредактировать это в будущем, даже иногда это может быть связано с использованием DB.

2. Он может обрабатывать код, который я вам покажу.

Поэтому, основываясь на этих объяснениях, у вас может быть столбец со значением по умолчанию, который существует в Fkeys, но это не будет чем-то, что вам нужно, и вы должны обновить его в будущей базе при использовании. и для этого вам нужно:

FIRST:

  • Создайте функцию, которая возвращает действительный и существующий внешний ключ определенной таблицы следующим образом:
  CREATE FUNCTION SelectMinForeignKey () RETURNS INT AS BEGIN DECLARE @FirstID INT SELECT @FirstID = MIN (ID) из DetailTableExample01 RETURN @FirstID END  

SECOND:

  • Затем вы должны изменить таблицу, чтобы добавить столбец следующим образом:
  ALTER TABLE example1 ADD NoNullableCol INT NOT NULL DEFAULT [dbo] .SelectMinForeignKey ()  
  • или с добавлением Relation мгновенно:
  ALTER TABLE example1 ADD NoNullableCol2 INT NOT NULL DEFAULT [dbo] .SelectMinForeignKey (), FOREIGN  KEY (NoNullableCol2) ССЫЛКИ DetailTableExample01 (id);   
  • или более в комплекте с добавлением ограничения мгновенно и назначаемым именем FK:
  ALTER TABLE dbo.example1 ADD NoNullableCol INT NOT NULL  DEFAULT [dbo] .SelectMinForeignKey (), CONSTRAINT FK_example1_DetailTableExample01 ИНОСТРАННЫЙ КЛЮЧ (NoNullableCol) СПИСОК ЛИТЕРАТУРЫ dbo.DetailTableExample01 (ID) В ОБНОВЛЕНИИ CASCADE ON DELETE CASCADE;   
  • или:
  ALTER TABLE dbo.example1 ADD NoNullableCol INT NOT NULL DEFAULT [dbo] .SelectMinForeignKey () GO ALTER  ТАБЛИЦА dbo.example1 ADD CONSTRAINT FK_example1_DetailTableExample01 ИНОСТРАННЫЙ КЛЮЧ (NoNullableCol) ССЫЛКИ dbo.DetailTableExample01 (ID) В ОБНОВЛЕНИИ CASCADE ON DELETE CASCADE  

ПРИМЕЧАНИЕ. Как вы знаете, имена таблиц и столбцов являются образцами.

THIRD:

  • Теперь вы должны изменить значения в NoNullableCol, как вы хотите

Все-в-одном:

  • Весь запрос будет выглядеть примерно так:
  CREATE FUNCTION SelectMinForeignKey () RETURNS INT AS BEGIN DECLARE @FirstID INT SELECT @FirstID = MIN (ID) из  DetailTableExample01 RETURN @FirstID END GO ALTER TABLE dbo.example1 ADD NoNullableCol INT NOT NULL DEFAULT [dbo] .SelectMinForeignKey (), CONSTRAINT FK_example1_DetailTableExample01 ИНОСТРАННЫЙ КЛЮЧ (NoNullableCol) ССЫЛКИ dbo.DetailTableExample01 (ID) ВКЛ. ОБНОВЛЕНИЕ КАСКАДЫ НА УДАЛИТЬ КАСКАД;   

И все готово!

Надеюсь, он решает вашу проблему

0
ответ дан D4NTESPARDA 15 August 2018 в 14:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: