【发布时间】:2019-08-13 15:29:11
【问题描述】:
我正在尝试从 sql server 的文件表中删除一些文档。
这里我有一个表,我将所有附件的详细信息和文档存储在名为 Attchemnts 的 sql server 文件表中。
AttachmentDetails 表具有以下架构,
CREATE TABLE [dbo].[AttachmentDetails](
[Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[DocumentName] [nvarchar](max) NULL,
[DocumentType] [nvarchar](max) NULL,
[ModifiedDateTime] [datetime] NOT NULL,
[CreatedDateTime] [datetime] NOT NULL,
[CreatedBy] [nvarchar](254) NULL,
[ModifiedBy] [nvarchar](254) NULL,
[IsDeleted] [bit] NULL,
)
每当我将任何文档上传到 File 表时,我都会根据表架构将该文档的详细信息插入到 AttchemntsDetails 表中。
这里我尝试了下面的解决方案
CREATE PROCEDURE [dbo].[DeleteFiles]
AS
BEGIN
DELETE Attachments
FROM AttachmentDetails a
WHERE
DocumentType = 'video/mp4' AND DATEDIFF(day, a.CreatedDateTime, GETDATE())<11
end
此过程假设仅删除 10 天前的视频/mp4 文件,但它会从文件表中删除任何类型的文档。
【问题讨论】:
-
DELETE ... FROM ... WHERE ...存储类型无关紧要 -
此处发布的查询将导致随机删除,因为没有保证所有
TOP 1查询在没有ORDER BY 子句时将返回什么.你想做什么?编写一个正确的DELETE查询比这个复杂的循环容易得多。 -
我写了循环,因为我想检查表中每条记录的条件。
-
这就是所有查询中的
WHERE子句的用途。WHERE DocumentType = 'video/mp4' AND CreatedDateTime < DATEADD(day,30,getdate())检查这两个条件的所有记录,只删除匹配的记录 -
BTW 发布表模式、数据样本和所需的输出。现在人们必须猜测这些表是什么。
ID是两个表中的主键吗?Table1是什么?
标签: sql-server stored-procedures filetable