У меня проблема при попытке добавить внешний ключ к моей tblDomare
таблице; что я тут не так делаю?
CREATE TABLE tblDomare
(PersNR VARCHAR (15) NOT NULL,
fNamn VARCHAR (15) NOT NULL,
eNamn VARCHAR (20) NOT NULL,
Erfarenhet VARCHAR (5),
PRIMARY KEY (PersNR));
INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (6811034679,'Bengt','Carlberg',10);
INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (7606091347,'Josefin','Backman',4);
INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (8508284163,'Johanna','Backman',1);
CREATE TABLE tblBana
(BanNR VARCHAR (15) NOT NULL,
PRIMARY KEY (BanNR));
INSERT INTO tblBana (BanNR)
Values (1);
INSERT INTO tblBana (BanNR)
Values (2);
INSERT INTO tblBana (BanNR)
Values (3);
ALTER TABLE tblDomare
ADD FOREIGN KEY (PersNR)
REFERENCES tblBana(BanNR);
Сообщение об ошибке:
Оператор ALTER TABLE конфликтовал с ограничением FOREIGN KEY "FK_ tblDomare _PersN__5F7E2DAC". Конфликт произошел в базе данных «almu0004», таблице «dbo.tblBana», столбце «BanNR».
sql
sql-server
database
user3162932
источник
источник
Этот запрос был очень полезен для меня. Он показывает все значения, которые не имеют совпадений
источник
Попробуйте это решение:
источник
Можно создать внешний ключ, используя имя таблицы ALTER TABLE WITH NOCHECK ..., что позволит использовать данные, которые нарушают внешний ключ.
Опция «ALTER TABLE tablename WITH NOCHECK ...» для добавления FK - Это решение сработало для меня.
источник
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.DETACH) @JoinTable(name = "tbUsuariosTipoOcorrencia", joinColumns = { @JoinColumn(name = "idUsuario") }, inverseJoinColumns = { @JoinColumn(name = "idTipoOcorrencia") })
и я сделал это решить с помощью запроса к базе данных:alter table tbUsuariosTipoOcorrencia WITH NOCHECK add constraint FKnbxg3ua7b8c5d53wps69q6jh foreign key (idUsuario) references tbUsuarios
Я предполагаю, что значение столбца в таблице внешнего ключа должно совпадать со значением столбца таблицы первичного ключа. Если мы пытаемся создать ограничение внешнего ключа между двумя таблицами, в котором значение внутри одного столбца (который будет внешним ключом) отличается от значения столбца таблицы первичного ключа, то будет выдано сообщение.
Поэтому всегда рекомендуется вставлять только те значения в столбце внешнего ключа, которые присутствуют в столбце таблицы первичного ключа.
Например Если столбец первичной таблицы имеет значения 1, 2, 3, а в столбце внешнего ключа вставленные значения различны, то запрос не будет выполнен, поскольку он ожидает, что значения будут между 1 и 3.
источник
Прежде чем добавить внешний ключ в таблицу, сделайте следующее
Если таблица содержит не переходить на дизайн и изменения, сделать это вручную.
alter table Таблица 1 добавить ссылки на внешний ключ (имя столбца) Таблица 2 (имя столбца)
таблица изменения alter Таблица 1 атрибут столбца Имя атрибута не ноль
источник
Очистите ваши данные от ваших таблиц и затем установите связь между ними.
источник
Попробуйте
DELETE
текущие данные изtblDomare.PersNR
. Поскольку значения вtblDomare.PersNR
не совпадают ни с одним из значений вtblBana.BanNR
.источник
у меня тоже была эта ошибка, так как Smutje ссылался, чтобы убедиться, что у вас нет значения в столбце внешнего ключа вашей базовой таблицы внешнего ключа, которого нет в вашей ссылочной таблице, т. е. (каждое значение в вашей базовой таблице внешнего ключа (значение столбца, который является внешний ключ) также должен находиться в столбце справочной таблицы) хорошо сначала очистить таблицу базовых внешних ключей, а затем установить внешние ключи
источник
данные, введенные вами в таблицу (tbldomare), не совпадают с данными, которым вы присвоили таблицу первичных ключей. напишите между tbldomare и добавьте это слово (с помощью nocheck), затем выполните ваш код.
например вы ввели в таблицу tbldomar эти данные
и вы назначили
foreign key
таблицу для принятия только1,2,3
.у вас есть два решения, одно из которых - удалить введенные вами в таблицу данные и выполнить код. другое - напишите это слово (с помощью nocheck), поместите его между именем таблицы и добавьте вот так
источник
Это происходит со мной, так как я проектирую свою базу данных, я замечаю, что я изменяю свое начальное число на моей главной таблице, теперь у реляционной таблицы нет внешнего ключа на главной таблице.
Поэтому мне нужно обрезать обе таблицы, и теперь это работает!
источник
Вы должны увидеть, есть ли в ваших таблицах какие-либо данные по строкам. Если «да» , то вы должны усечение стола (ы) , или же вы можете сделать , чтобы они имели одинаковое количество данных на
tblDomare.PersNR
доtblBana.BanNR
и тисков стиха.источник
Смутье прав, и Чед ХеджКок привел пример великого мирянина. Я хотел бы опираться на пример Чада, предлагая способ найти / удалить эти записи. Мы будем использовать Клиента как Родителя, а Заказ - как ребенка. CustomerId - это общее поле.
если вы читаете эту ветку ... вы получите результаты. Это дети-сироты. выберите * из заказа. Дочернее слева присоедините Customer Parent к Child.CustomerId = Parent.CustomerId, где Parent.CustomerId равен нулю. Обратите внимание на количество строк в правом нижнем углу.
Идите и убедитесь, кому вы хотите удалить эти строки!
Запустите первый бит. Проверьте количество строк = то, что вы ожидали
совершить транс
Быть осторожен. Нечистое программирование втянуло вас в этот беспорядок. Убедитесь, что вы понимаете, почему, прежде чем удалить сирот. Может быть, родитель должен быть восстановлен.
источник
В моем сценарии, используя EF, при попытке создать этот новый внешний ключ на существующих данных я ошибочно пытался заполнить данные (сделать ссылки) ПОСЛЕ создания внешнего ключа.
Исправление заключается в заполнении ваших данных перед созданием внешнего ключа, поскольку он проверяет их все, чтобы убедиться, что ссылки действительно действительны. Так что это не могло бы сработать, если вы еще не заполнили его.
источник
Я столкнулся с некоторой проблемой в моем проекте.
В дочерней таблице нет ни одного идентификатора записи, равного 1 и 11
Я вставил таблицу DEAL_ITEM_THIRD_PARTY_PO, Id которой равен 1 и 11, после чего я могу создать FK
источник
Сначала удалите данные из этой таблицы, а затем снова запустите миграцию. Вы получите успех
источник
Когда вы определяете внешний ключ в таблице B, ссылаясь на первичный ключ таблицы A, это означает, что когда значение находится в B, оно должно быть в A. Это предотвращает несогласованные изменения таблиц.
В вашем примере ваши таблицы содержат:
tblDomare с
PRIMARY KEY (PersNR)
:tblBana:
Это утверждение:
говорит, что любая строка
tblDomare
с ключомPersNR
должна иметь соответствие в таблицеtblBana
по ключуBanNR
. Ваша ошибка в том, что у вас вставлены строкиtblDomare
без соответствия вtblBana
.2 решения , чтобы решить проблему: - либо добавить строки в
tblBana
сBanNR in (6811034679, 7606091347, 8508284163) - or remove all lines in
tblDomarethat have no correspondance in
tblBana` (но ваша таблица будет пустой)Общий совет : вы должны иметь ограничение внешнего ключа перед заполнением таблиц. Внешние ключи здесь для предотвращения заполнения таблицами несоответствий пользователем таблицы.
источник
и просто к сведению, если вы выполните все проверки ссылок на данные и не обнаружите неверных данных ... очевидно, невозможно создать ограничение внешнего ключа между двумя таблицами и полями, где эти поля являются первичным ключом в обеих таблицах! Не спрашивайте меня, откуда я это знаю.
источник