这是一个确切的查询吗
本文关键字:查询 一个 | 更新日期: 2023-09-27 18:22:10
我有两个表
Inbox(id,accountid,emailfrom,emailsubject,emailbody,emaildate,attachment)
Trash(as above)
当用户想要从inboxDataGridView
中删除一行时,首先将该行复制到trash
表中。我正在尝试此查询以首先复制行:
string query = "INSERT INTO Trash(inboxid, accountid, emailfrom, subject, emailbody,emaildate,attachment) SELECT inboxid, accountid, emailfrom, subject, emailbody,emaildate,attachment FROM Inbox WHERE(inboxid = " + accountinfo.PEmailId + ")";(where accountinfo.PEmailId = selectedRow value
但是这个查询给了我一个错误。
请指导我如何做到这一点,复制和删除。
这应该有效:
插入:
INSERT INTO Trash(id, accountid, emailfrom, subject, emailbody,
emaildate,attachment)
SELECT id, accountid, emailfrom, subject, emailbody,emaildate,attachment
FROM Inbox
WHERE id = @id
删除:
DELETE Inbox
WHERE id = @id
您需要在同一个命令中执行语句,或者在事务中作为两个单独的命令执行语句,这取决于您是否希望在其间执行其他操作。@id参数应作为命令参数提供,以防止SQL注入攻击。
如果您希望解决方案的一部分在数据库端,您可以将其创建为存储过程,也可以按照@ThitWinOo的建议创建触发器。如果您使用触发器方法,Delete语句就足以从程序中执行。
实际上,有一种简单而更好的方法可以完成您想要的任务,那就是在删除时编写触发器。你的数据库是什么?SQL Server?
我假设您的数据库是Sql Server。。请在您的数据库中尝试以下触发器。
CREATE TRIGGER [dbo].[tri_BACKUP_DELETED_ROWS]
ON [dbo].[Inbox]
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
-- Insert statements for trigger here
IF EXISTS (SELECT * FROM deleted)
BEGIN
-- keep old record
INSERT INTO Trash(inboxid, accountid, emailfrom, subject, emailbody,emaildate,attachment)
SELECT inboxid, accountid, emailfrom, subject, emailbody,emaildate,attachment
FROM DELETED
END
END