I want to create primary key on basis of unqid + isremoved and in which isremoved must be true
что касается значений, первичный ключ только гарантирует, что они uniqu е. Когда первичный ключ является составным, состоящим из нескольких столбцов, это означает, что ключ является любой уникальной комбинацией всех задействованных столбцов. Это означает, что если первичный ключ является одновременно unqid
и isremoved
- следующая будут действительные строки в таблице:
UNQID | ISREMOVED
---------------------------------------------------------------
6F9619FF-8B86-D011-B42D-00C04FC964FF | 1
6F9619FF-8B86-D011-B42D-00C04FC964FF | 0
Ваш первичный ключ должен не включают isremoved
колонки.
...when I try to make the isremoved
field value set to true/1 in the tblcountry table, I should get an error if I have used it in referenced table tblstate if its' isremoved
field is not true. and if the tabstate the isremoved is true for that primary key than its should not give any error.
Чтобы сделать это, вам нужно внешнего ключа ссылку, связывающую unqid
и isremoved
столбцов в tblcountry
к unqid
и isremoved
столбцов в таблице tblstate
.
ALTER TABLE tblcountry
ADD CONSTRAINT tstate_fk FOREIGN KEY (unqid, isremoved) references tblstate (unqid, isremoved)
У Джошуа была правильная идея, неправильное направление.
Но это означает, что для того, чтобы вставить запись в tblcountry
, вы должны иметь значение unqid
уже в tblstate
. Столбец с ограничением внешнего ключа может быть нулевым - значение, равное null, не будет отключать ограничение внешнего ключа, но вы не можете указать часть внешнего ключа. Либо вы удовлетворяете внешний ключ, либо нет.
Я не понимаю, на что вы надеялись моделировать - если бы у меня была лучшая идея, я бы предложил альтернативы.
Я выполнил ваше решение, работая отлично.когда я вставляю данные в tabcountry, он позволяет мне вставлять, но когда я пытаюсь вставить в tabstate его выдачу ошибки – 2009-12-05 05:34:23
все еще получаю ошибку: Msg 547, уровень 16, состояние 0, строка 1 выберите * из tblcountry BCB1C75D-B70C-4C6E -8A88-01E4624CBDD2 \t \t Ind 0 F2C50808-9206-47D8-A712-701886244535 \t \t пак 0 EA58024C-3B1A-4C59-8F56-AA7E8FD4436C \t \t Afganistan 0 вставка в значения tblstate (NEWID(), 'Раджастхана' , 'BCB1C75D-B70C-4C6E-8A88-01E4624CBDD2', 0) Оператор INSERT противоречил ограничению FOREIGN KEY "fk". Конфликт произошел в базе данных «usecomp», таблица «dbo.tblcountry». Заявление было прекращено. – 2009-12-05 06:01:44