Sql server 如何从Filetable中删除文档?
我正在尝试从sql server的文件表中删除一些文档 在这里,我有一个表,其中我将所有附件的详细信息和文档存储在sql server名为Attchemnts的文件表中 AttachmentDetails表具有以下架构Sql server 如何从Filetable中删除文档?,sql-server,stored-procedures,filetable,Sql Server,Stored Procedures,Filetable,我正在尝试从sql server的文件表中删除一些文档 在这里,我有一个表,其中我将所有附件的详细信息和文档存储在sql server名为Attchemnts的文件表中 AttachmentDetails表具有以下架构 CREATE TABLE [dbo].[AttachmentDetails]( [Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, [DocumentName] [nvarchar](max) NULL, [Doc
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,
)
每当我将任何文档上传到文件表时,我都会按照表模式在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文件,但它会从文件表中删除任何类型的文档 SQL是一种基于集合的语言。对于每个基于游标/循环的脚本,都有一个更简单、更快的基于集合的解决方案。在任何情况下,此查询的编写方式都会导致随机删除,因为无法保证在没有ORDERBY子句的情况下,所有排名前1的查询都会返回什么 看起来您正在尝试删除所有超过30天的视频附件。看起来日期还存储在一个名为table1的单独表中。如果使用from子句,可以编写一个DELETE语句,其行来自联接,例如:
DELETE Attachments
FROM Attachments inner join table1 a on a.ID=Attachments.ID
WHERE
DocumentType = 'video/mp4' AND
CreatedDateTime < DATEADD(day,-30,getdate())
及
执行删除查询将仅删除ID为1的附件。询问
select *
from Attachments
```
Will return :
```
ID DocumentType
2 audio/mp3
3 application/octet-stream
4 video/mp4
```
删去从…起哪里存储类型不重要此处发布的查询将导致随机删除,因为无法保证在没有ORDER BY子句的情况下,所有排名前1的查询将返回什么。你想干什么?编写一个正确的删除查询要比编写这个复杂的循环容易得多。我编写了循环,因为在那里我需要检查表中每个记录的条件。这就是所有查询中WHERE子句的作用。其中DocumentType='video/mp4'和CreatedDateTime
create table table1 (ID int primary key, CreatedDateTime datetime)
insert into table1 (ID,CreatedDateTime)
values
(1,dateadd(day,-40,getdate())),
(2,dateadd(day,-40,getdate())),
(3,getdate()),
(4,getdate())
select *
from Attachments
```
Will return :
```
ID DocumentType
2 audio/mp3
3 application/octet-stream
4 video/mp4
```