Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Удаление записи с полем Primary Key / 17 сообщений из 17, страница 1 из 1
30.11.2018, 15:56
    #39741043
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
Коллеги, на MSSQL недавно, возникла ламерская незадача, пробую удалить запись в таблице A c PK и она удаляется благополучно при живом FK, который создан в таблице B и ссылается на удаленную запись с PK.

При этом FK стал равен null. Как сделать чтобы нельзя было удалить PK, на который ссылается FK.
...
Рейтинг: 0 / 0
30.11.2018, 16:04
    #39741053
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
wsnet,
автор"и она удаляется благополучно при живом" "При этом FK стал равен null."
не такого поведения "по умолчанию".
...
Рейтинг: 0 / 0
30.11.2018, 16:04
    #39741055
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
wsnetКак сделать чтобы нельзя было удалить PK, на который ссылается FK.Пересоздать FK без каскадных операций.
...
Рейтинг: 0 / 0
30.11.2018, 16:05
    #39741057
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
invmwsnetКак сделать чтобы нельзя было удалить PK, на который ссылается FK.Пересоздать FK без каскадных операций.
я честно не пользуюсь, но какая из каскадных оперраций замиент на NULL при удалении?
...
Рейтинг: 0 / 0
30.11.2018, 16:13
    #39741071
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
TaPaKinvmпропущено...
Пересоздать FK без каскадных операций.
я честно не пользуюсь, но какая из каскадных оперраций замиент на NULL при удалении?

There are four available options in SQL Server 2005 and later versions (SQL Server 2016 as of today) as follows:

No Action
Cascade
SET NULL
SET Default
...
Рейтинг: 0 / 0
30.11.2018, 16:17
    #39741074
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
courtTaPaKпропущено...

я честно не пользуюсь, но какая из каскадных оперраций замиент на NULL при удалении?

There are four available options in SQL Server 2005 and later versions (SQL Server 2016 as of today) as follows:

No Action
Cascade
SET NULL
SET Default
о, день прошёл не зря :)
...
Рейтинг: 0 / 0
30.11.2018, 16:17
    #39741075
wadegwadeg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
TaPaKinvmпропущено...
Пересоздать FK без каскадных операций.
я честно не пользуюсь, но какая из каскадных оперраций замиент на NULL при удалении?
Сильно.
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/alter-table-table-constraint-transact-sql?view=sql-server-2017
...
Рейтинг: 0 / 0
30.11.2018, 17:53
    #39741191
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
invmwsnetКак сделать чтобы нельзя было удалить PK, на который ссылается FK.Пересоздать FK без каскадных операций.

Таки при создании FK на каскадные операции было no action.
...
Рейтинг: 0 / 0
30.11.2018, 18:37
    #39741220
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
Попробывал пересоздать FK итог все тот же - можем удалить запись с PK. Где еще посмотреть?
...
Рейтинг: 0 / 0
30.11.2018, 18:44
    #39741225
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
wsnetПопробывал пересоздать FK итог все тот же - можем удалить запись с PK. Где еще посмотреть?Триггер на удаление в А, который "зануллает" удаляемые записи в B
...
Рейтинг: 0 / 0
30.11.2018, 18:44
    #39741226
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
courtwsnetПопробывал пересоздать FK итог все тот же - можем удалить запись с PK. Где еще посмотреть?Триггер на удаление в А, который "зануллает" удаляемые записи в BINSTEAD OF , походу ...
...
Рейтинг: 0 / 0
30.11.2018, 18:44
    #39741227
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
wsnet,

уверены что правильно пересоздали? посмотрите результат запроса:
Код: sql
1.
select delete_referential_action_desc, name from sys.foreign_keys where parent_object_id = object_id('имя вашей таблицы на которой висит FK', 'U')
...
Рейтинг: 0 / 0
30.11.2018, 19:05
    #39741244
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
felix_ffwsnet,

уверены что правильно пересоздали? посмотрите результат запроса:
Код: sql
1.
select delete_referential_action_desc, name from sys.foreign_keys where parent_object_id = object_id('имя вашей таблицы на которой висит FK', 'U')



Ответ:
Код: sql
1.
NO_ACTION	FK_inspection_plan_s_object
...
Рейтинг: 0 / 0
30.11.2018, 19:07
    #39741248
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
courtcourtпропущено...
Триггер на удаление в А, который "зануллает" удаляемые записи в BINSTEAD OF , походу ...

Да откуда там триггеру взяться, таблицы недавно созданы, нет - триггеров на них не висит.
...
Рейтинг: 0 / 0
30.11.2018, 19:32
    #39741265
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
Небось, удаляется запись, на которую никто не ссылается?
...
Рейтинг: 0 / 0
30.11.2018, 19:39
    #39741269
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
iap, если бы было так. Запись удаляется, для которой есть данные в другой таблице.
...
Рейтинг: 0 / 0
30.11.2018, 21:30
    #39741313
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление записи с полем Primary Key
wsnet,

хм, странно такого быть не должно если вы реально по факту все правильно сделали:
пример
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
drop table if exists dbo.t2;
drop table if exists dbo.t1;
go

create table dbo.t1 (id int primary key);
go
create table dbo.t2 (pk_id int, val varchar(255), constraint fk foreign key (pk_id) references dbo.t1(id) on delete set null)
go
insert into dbo.t1 values (1), (2) ,(3)
go
insert into dbo.t2 values (1, 'TEST'), (1, 'TEST'), (2, 'TEST2'), (3, 'TEST3')
go
begin try
insert into dbo.t2 values (4, 'TEST')
end try
begin catch
select error_number(), error_message()
end catch
go
select delete_referential_action_desc, * from sys.foreign_keys where parent_object_id = object_id('dbo.t2') --SET_NULL
go

begin tran
delete from dbo.t1 where id = 3
select * from dbo.t2 --запись с pk_id=3 стала NULL
rollback;
go

--пересоздаем fk
alter table dbo.t2 
drop constraint fk
go

alter table dbo.t2 
add constraint fk foreign key (pk_id) references dbo.t1(id)
go
select delete_referential_action_desc, * from sys.foreign_keys where parent_object_id = object_id('dbo.t2') --NO_ACTION
go
--//пересоздаем fk

begin tran
begin try
delete from dbo.t1 where id = 3
end try
begin catch
select error_number(), error_message()
select * from dbo.t2 --запись с pk_id=3 осталась нетронутой
end catch
rollback;
go

drop table if exists dbo.t2;
drop table if exists dbo.t1;
go


...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Удаление записи с полем Primary Key / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]