在我的表中有三列或更多列存储图像文件路径,所以我需要将图像文件路径存储到指定表'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所以我唯一能做的就是创建一个临时表来解决这个问题,但如果是这样,对于这个简单的目标,我使用了触发器,游标,temptable和子程序调用,我真的非常关心计算的成本< / p>
如果有人有更好的解决方案吗?
PS:我很抱歉我的泳池英语和我的泳池问题
PPS:我知道做复杂事情的需要有些不对劲,如果团队中的程序员愿意在删除数据的同时删除文件,我就不需要这样做了,但是他们不会,所以我只是尝试我的规模答案 0 :(得分: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
这是一个更好的主意。