在我的表中有三列或更多列存储图像文件路径,所以当数据要删除时,我需要将图像文件路径存储到指定表'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:我知道需要做这个复杂的事情有问题,如果我们团队的程序员愿意在删除数据的同时删除文件,我不需要这样做,但他们不会,所以我只是尝试我的规模