【发布时间】:2021-10-12 21:59:02
【问题描述】:
我在 sql server 中有一个存储过程,第一步将一些数据从一个表插入到另一个表中,然后从第一个表中删除插入到第二个表中的数据;可能描述比较复杂,看代码吧:
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
Insert 语句执行成功,没有问题,但在 Delete 语句中不起作用,没有任何反应。 那么问题出在哪里,我该如何解决呢?
【问题讨论】:
-
这是我的错,我解决了。谢谢,但它与此无关,它在存储过程之外成功执行
-
不考虑为什么您的删除不起作用 - 这些应该在事务上保持一致并且应该在
begin/end transaction内。您也可以使用output在单个语句中执行此操作。此外,在您的架构前缀中保持一致 - 始终使用dbo或不使用,否则您可能会产生歧义。 -
还有single statement option,因为SQL Server支持
delete TableA output ... into TableB。 -
@AlwaysLearning 谢谢,成功了!
标签: sql sql-server stored-procedures