0

在我的表中有三列或更多列存储图像文件路径,所以当数据要删除时,我需要将图像文件路径存储到指定表'OnDeleteFile',然后程序在任务方法中删除Web服务器中的文件从这个指定的表中,但是有很多像这样的表,我不想在每个触发器中每次都写,以将每一列插入到表 OnDeleteFile 中,如下所示:

insert into OnDeleteFile(filePath) select column1 from deleted,
insert into OnDeleteFile(filePath) select column2 from deleted,
insert into OnDeleteFile(filePath) select column3 from deleted

有这么多的表和这么多的列,所以我希望我可以循环执行此操作

像这样的tsql:

declare mycursor cursor fast_forward
for select columnName from #temptable where isContent=0 
open mycursor
fetch next from mycursor into @column 
while @@fetch_status = 0
begin
    select @sqlstr='insert into OnDeleteFile(fileType,filePath) select fileType=''image'',@columnName from deleted where @columnName is not null and @columnName <> '''' '
    exec sp_executesql
    @stat=@sqlstr,
    @params=N'@columnName as varchar(255)',
    @columnName=@column
    fetch next from mycurosr into @column 
end

它运行错误:对象名称“已删除”无效

我尝试这种方式:

declare mycursor cursor fast_forward
for select columnName from #temptable where isContent=0 
open mycursor
fetch next from mycursor into @column 
while @@fetch_status = 0
begin
    exec('insert into OnDeleteFile(fileType,filePath) select fileType=''image'','+ @column +' from deleted where '+ @column + ' is not null and '+ @column + ' <> '''' ')
end

再次失败

我认为问题是可以使用已删除表的范围,已删除表无法在proc sp_executesql中访问

所以我唯一能做的就是创建一个临时表来解决这个问题,但如果是这样,为了这个简单的目标,我使用了触发器、游标、临时表和子过程调用,我真的很关心计算成本

如果有人有更好的解决方案?

PS:我很抱歉我的台球英语和我的台球问题

PPS:我知道需要做这个复杂的事情有问题,如果我们团队的程序员愿意在删除数据的同时删除文件,我不需要这样做,但他们不会,所以我只是尝试我的规模

4

1 回答 1

2

不,不要那样做,按照你不想做的方式去做。

insert into OnDeleteFile(filePath) select column1 from deleted,
insert into OnDeleteFile(filePath) select column2 from deleted,
insert into OnDeleteFile(filePath) select column3 from deleted

这是一个更好的主意。

于 2012-11-29T15:37:10.463 回答