Почему SQL DELETE запрос не работает при использовании с LIKE Keyword? - PullRequest
1 голос
/ 09 июля 2019

Я хочу удалить некоторые данные из моей таблицы, поэтому напишите запрос, чтобы удалить их. Итак, сначала я выбрал данные, которые я хотел удалить, используя этот запрос, и он показал мне правильные данные

select * from PATS.Discipline where Code like '%DHA-DIS%'

тогда я пишу удаление, используя то же самое условие, но оно не работает

DELETE FROM PATS.Discipline WHERE Code LIKE '%DHA-DIS%'

здесь я делюсь некоторыми скриншотами во время выполнения запроса enter image description here

вот некоторые примеры данных enter image description here

это последний результат выполнения, и я ждал 1 минуту и ​​в последний раз остановил выполнение enter image description here

добавлена ​​структура таблицы enter image description here

Ответы [ 3 ]

4 голосов
/ 09 июля 2019

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

Для меня это нормально работает и удаляет тестовые данные из таблицы

select * from Discipline
select * from Discipline where Code like '%DHA-DIS%'

enter image description here

DELETE FROM Discipline WHERE Code LIKE '%DHA-DIS%'

(2 row(s) affected)


select * from Discipline where Code like '%DHA-DIS%'

enter image description here

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

1 голос
/ 09 июля 2019

Возможно, существует блокировка таблицы Discipline другим процессом
Вы можете найти блокировки на вашем столе, запустив этот скрипт

declare @lock table (spid int, dbid int, objId int, indId int, Type char(4), resource nchar(32), Mode char(8), status char(6))
declare @who table (spid int, ecid int, status char(30), loginname char(128), hostname char(128), blk char(5), dbname char(128), cmd char(16), request_id INT)
declare @LockSummary table (loginname varchar(28), DB varchar(128), object varchar(30), ToLevel varchar(20), How_Many int, Xclusive_lock_for_command char(16), spid int, hostname char(128))

insert into @lock exec sp_lock
insert into @who exec sp_who

insert into @LockSummary
select loginname, 
       db_name(dbid) as DB,
       object_name(objID) as object,
       max(mode) as [ToLevel],
       Count(*) as [How Many],
       Max(Case When mode= 'X' Then cmd Else null End) as [Xclusive lock for command],
       l.spid, 
       hostname
from   @lock l 
  join @who w on l.spid = w.spid
where  dbID != db_id('tempdb') 
and    l.status = 'GRANT'
group by dbID, objID, l.spid, hostname, loginname

select * 
from   @LockSummary 
where  object like '%Discipline%'
order by [ToLevel] Desc, [How_Many] Desc, loginname, DB, object
1 голос
/ 09 июля 2019

1) У вас есть 5000 строк для удаления, но это не обязательно вся таблица.Сколько строк в таблице?

2) Для вашего оператора LIKE потребуется сканирование таблицы.Если есть множество строк или больших столбцов, это займет много времени.

3) Разместите план запроса и статистику в таблицах, которые он использует.

4) Если вы отменитеdelete тогда БД откатится.Вот почему вы видите, что это ничего не делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...