如何在sql中子字符串物理文件

时间:2015-11-10 04:55:08

标签: sql-server tsql cmd command-prompt

我有来自服务器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

1 个答案:

答案 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