我有来自服务器A的这个.txt文件,我需要用它做例程A,如果.txt文件超过1天,将执行例程A ...我有这个现有的代码,但只有计数然后执行rountine A ...
示例(来自服务器A的文件):file_item.20151109.txt - 自11月9日起,我需要执行例程A ...任何想法如何从物理文件中执行例程A?
知道为什么我不能做这个工作吗?
IF object_id('tempdb.dbo.#tblFiles') > 0
BEGIN
DROP TABLE #tblFiles
END
CREATE TABLE #tblFiles (FileNames varchar(1000))
SET @CmdShell = 'master.dbo.xp_cmdshell ''' + 'Dir ' + @SourceCode + ' /b'' '
INSERT INTO #tblFiles exec (@CmdShell)
Set @RowCnt = @@RowCount - 1
IF @RowCnt is not null
--=3 and (@MaxLogProcDt < @MaxOPTProcDt)
--IF (@MaxLogProcDt < @MaxOPTProcDt)
BEGIN
DECLARE cFileName CURSOR FOR
SELECT * FROM #tblFiles
OPEN cFileName
FETCH NEXT FROM cFileName INTO @FileName
SELECT @Test = SUBSTRING(@FileName, 11,8)
--WHILE (@@fetch_status = 0)
END
IF @Test = @YYYYMMDD
--BEGIN ROUTINE A
ELSE
--HOUSEKEEP FILES ROUTINE
答案 0 :(得分:0)
您可以执行以下操作以获取文件上的最后修改日期,然后从现在开始减去日期并根据差异执行例程,修改为在评论中使用光标。
if exists(select 1 from tempdb..sysobjects where name='##temp')
drop table ##temp
create table ##temp(mdate varchar(8000))
insert ##temp
exec master.dbo.xp_cmdshell 'dir c:\'
set rowcount 5
delete from ##temp
set rowcount 0
--select * from ##temp
delete top(3) FROM ##temp where mdate in (select top (3) mdate from ##temp order by mdate asc)
--select * from ##temp
DECLARE FileCursor
CURSOR FOR
SELECT mdate
FROM ##temp
WHERE DATEDIFF(dd, SUBSTRING(mdate, 1, 20), GETDATE() ) < 1
DECLARE @A VarChar(8000)
OPEN FileCursor
FETCH NEXT FROM FileCursor INTO @A
WHILE (@@FETCH_STATUS = 0)
BEGIN
--Do Routine A
PRINT @A
FETCH NEXT FROM FileCursor INTO @A
END
CLOSE FileCursor
DEALLOCATE FileCursor