У меня есть хранимая процедура на сервере sql, которая на первом этапе вставляет некоторые данные из одной таблицы в другую, а затем удаляет данные, вставленные во вторую таблицу, из первой таблицы; Возможно, это сложное описание, поэтому давайте посмотрим код:
ALTER PROCEDURE [dbo].[SP_Insert_NotificationUserBulk]
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[NotificationUserBulk]
([NotificationId]
,[UserId]
,[IsNotify]
,[IsShow]
,[NotifyMethod]
,[NotifyDateTime]
,[ShowDateTime]
,[IsDeleted]
,[CreatedDate]
,[ModifiedDate])
(SELECT
UserId,
NotificationId,
IsNotify,
IsShow,
NotifyMethod,
NotifyDateTime,
ShowDateTime,
IsDeleted,
CreatedDate,ModifiedDate
FROM NotificationUsers WHERE IsShow=1 OR IsDeleted=1)
DELETE FROM dbo.NotificationUsers WHERE IsShow=1 OR IsDeleted=1
RETURN
END
Операция вставки выполняется успешно, проблем нет, но инструкция удаления не работает и ничего не происходит. Так в чем проблема и как ее исправить?
Это моя вина, и я исправляю это. Спасибо, но это не связано с этим, и оно успешно выполняется вне хранимой процедуры.
Не принимая во внимание, почему ваше удаление не работает - они должны быть согласованы с транзакциями и должны находиться в пределах
begin/end transaction
. Вы также можете сделать это в одном выражении, используяoutput
. Кроме того, будьте последовательны в своем префиксе схемы - либо используйте последовательноdbo
, либо нет, иначе вы рискуете двусмысленностью.Существует также вариант одного оператора, поскольку SQL Server поддерживает
delete TableA output ... into TableB
.@AlwaysLearning Спасибо, сработало!