TO: mgsray(我是新新新新,新来的吧) 里面有文件的路径.想在删除数据记录,也能顺便删除某个目录下的图片文件...谢谢!!!!!!
1.既然每天都要删除,我想应该用作业定时自动处理比较好,这样不用人工干预,而且也可以把它放到没有什么人用的时候去进行处理,比较凌晨1点2.删除记录的时候,如果要连文件一齐删除,那速度就慢了,如果你的文件命名有规则,可以用 delete xx*.* 之类的来删除,否则要用游标逐个删除文件,那数据量在的话,可能拖死服务器3.删除记录的处理语句,建议这样写,效率会高很多: delete from t where JGSJ<dateadd(day,-7,convert(char(10),getdate(),120))
create trigger t_table on t for delete as declare @file varchar(300) declare cur_1 cursor for select filepath --路径字段名 from deleted open cur_1 fetch next from cur_1 into @file while (@@fetch_status=0) begin
exec master..xp_cmdshell 'del '+@file fetch next from cur_1 into @file end close cur_1 deallocate cur_1
我在等你 zjcxc(邹建) 你众于出马了!!!呵呵 !明天结帖子!
delete from t where JGSJ<(getdate()-7)
/*--我的处理方案是这样的 假设楼主要处理的数据库名为: Db_Test 表名是: test 删除处理判断的日期字段是: JGSJ 要删除的文件名(包括目录信息)保存的字段是: filename
create procedure sp_1
as
delete from t where datediff(day,JGSJ,getdate())>7
go
就行了
打开企业管理器->服务器->管理->SQL SERVER 代理->作业
delete from t where JGSJ<dateadd(day,-7,convert(char(10),getdate(),120))
as
declare @file varchar(300)
declare cur_1 cursor for select filepath --路径字段名
from deleted
open cur_1
fetch next from cur_1 into @file
while (@@fetch_status=0)
begin
exec master..xp_cmdshell 'del '+@file
fetch next from cur_1 into @file
end
close cur_1
deallocate cur_1
表名是: test
删除处理判断的日期字段是: JGSJ
要删除的文件名(包括目录信息)保存的字段是: filename
要求每天凌晨1点自动清理7天前的记录,并且删除对应的文件
--*/--切换到要处理的数据库
use Db_Test
go--设置 SQL Agent 服务为自动启动
exec msdb..sp_set_sqlagent_properties @auto_start=1
go--创建数据处理的作业
exec msdb..sp_add_job @job_name='数据处理'--创建作业步骤
declare @sql varchar(800),@dbname varchar(250)
select @sql='
--删除处理的语句--生成删除文件的批处理文件,这样在删除文件时,把处理交给系统
--也避免了用游标循环处理数据,消耗服务器资源
declare @sql nvarchar(4000)
select @sql=''select ''''del ''''+char(34)+rtrim(filename)+char(34) from [''+db_name()+''].dbo.Test where JGSJ<dateadd(day,-7,convert(char(10),getdate(),120))''
,@sql=@sql+'' union all select ''''del c:\08CC6E01_0D8E.bat'''''' --批处理的最后是要销毁自己
,@sql=''bcp "''+@sql+''" quertout "c:\08CC6E01_0D8E.bat" /U"sa" /P"密码" /c''
exec master..xp_cmdshell @sql--删除表中的数据
delete from t where JGSJ<dateadd(day,-7,convert(char(10),getdate(),120))--调用批处理删除文件
exec master..xp_cmdshell ''c:\08CC6E01_0D8E.bat''
' --数据处理的命令
,@dbname=db_name() --执行数据处理的数据库名exec msdb..sp_add_jobstep @job_name='数据处理',
@step_name = '数据删除',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql,
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔--创建调度
EXEC msdb..sp_add_jobschedule @job_name = '数据处理',
@name = '时间安排',
@freq_type=4, --4 每天,8 每周,16 每月
@freq_interval=1, --作业执行的天数
@freq_subday_type=0, --是否重复执行,0x1 在指定的时间, 0x4 分钟, 0x8 小时
@freq_subday_interval=1, --重复周期
@freq_recurrence_factor=0, --重复执行,则设置为1,否则设置为0
@active_start_time = 00000 --0点开始执行-- 添加目标服务器
EXEC msdb.dbo.sp_add_jobserver
@job_name = '数据处理' ,
@server_name = N'(local)'
企业管理器->服务器->右键->属性->内存