我們有一個接口,它具有以下名稱格式創建日常三個文件:檢查文件內容的SQL Server 2008 R2
- FileAYYYYMMDD(例如:FileA20170925)
- FileBYYYYMMDD(例如:FileB20170925)
- FileCYYYYMMDD (例如:FileC20170925)
有人需要手動檢查以確定這些文件是否爲空。我想自動化這一步。
我想知道的是: 有沒有一種方法可以通過SQL查詢或SQL作業確定這些文件是否爲空(Yes或No是否足夠好)?
我們有一個接口,它具有以下名稱格式創建日常三個文件:檢查文件內容的SQL Server 2008 R2
有人需要手動檢查以確定這些文件是否爲空。我想自動化這一步。
我想知道的是: 有沒有一種方法可以通過SQL查詢或SQL作業確定這些文件是否爲空(Yes或No是否足夠好)?
你應該能夠從這種site存儲過程spFileDetails
獲得文件大小。
如果文件大小是0
那麼文件是空的。 這是存儲過程的副本。由於 「菲爾因子」
/****** Object: StoredProcedure [dbo].[spFileDetails] Script Date: 03/28/2007 15:28:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spFileDetails]
@Filename VARCHAR(100)
/*
spFileDetails 'c:\autoexec.bat'
*/
AS
DECLARE @hr INT, --the HRESULT returned from
@objFileSystem INT, --the FileSystem object
@objFile INT, --the File object
@ErrorObject INT, --the error object
@ErrorMessage VARCHAR(255),--the potential error message
@Path VARCHAR(100),--
@ShortPath VARCHAR(100),
@Type VARCHAR(100),
@DateCreated datetime,
@DateLastAccessed datetime,
@DateLastModified datetime,
@Attributes INT,
@size INT
SET nocount ON
SELECT @hr=0,@errorMessage='opening the file system object '
EXEC @hr = sp_OACreate 'Scripting.FileSystemObject',
@objFileSystem OUT
IF @hr=0 SELECT @errorMessage='accessing the file '''
[email protected]+'''',
@[email protected]
IF @hr=0 EXEC @hr = sp_OAMethod @objFileSystem,
'GetFile', @objFile out,@Filename
IF @hr=0
SELECT @errorMessage='getting the attributes of '''
[email protected]+'''',
@[email protected]
IF @hr=0 EXEC @hr = sp_OAGetProperty
@objFile, 'Path', @path OUT
IF @hr=0 EXEC @hr = sp_OAGetProperty
@objFile, 'ShortPath', @ShortPath OUT
IF @hr=0 EXEC @hr = sp_OAGetProperty
@objFile, 'Type', @Type OUT
IF @hr=0 EXEC @hr = sp_OAGetProperty
@objFile, 'DateCreated', @DateCreated OUT
IF @hr=0 EXEC @hr = sp_OAGetProperty
@objFile, 'DateLastAccessed', @DateLastAccessed OUT
IF @hr=0 EXEC @hr = sp_OAGetProperty
@objFile, 'DateLastModified', @DateLastModified OUT
IF @hr=0 EXEC @hr = sp_OAGetProperty
@objFile, 'Attributes', @Attributes OUT
IF @hr=0 EXEC @hr = sp_OAGetProperty
@objFile, 'size', @size OUT
IF @hr<>0
BEGIN
DECLARE
@Source VARCHAR(255),
@Description VARCHAR(255),
@Helpfile VARCHAR(255),
@HelpID INT
EXECUTE sp_OAGetErrorInfo @errorObject,
@source output,@Description output,
@Helpfile output,@HelpID output
SELECT @ErrorMessage='Error whilst '
[email protected]+', '
[email protected]
RAISERROR (@ErrorMessage,16,1)
END
EXEC sp_OADestroy @objFileSystem
EXEC sp_OADestroy @objFile
SELECT [Path]= @Path,
[ShortPath]= @ShortPath,
[Type]= @Type,
[DateCreated]= @DateCreated ,
[DateLastAccessed]= @DateLastAccessed,
[DateLastModified]= @DateLastModified,
[Attributes]= @Attributes,
[size]= @size
RETURN @hr
根據MatSnow的建議,我能夠找到/創建spFileDetails存儲過程。使用這個存儲過程,我能夠創建SSRS報告,這將幫助我自動化過程。另外,我甚至可以傳遞一個日期參數評估歷史文件:
declare @FileDATE AS VARCHAR(8)
select @FileDATE = (SELECT CONVERT(VARCHAR(10), @ReportDate, 112))
DECLARE @FolderLocation as varchar(200)
select @FolderLocation = ('\\share\\Validation\File' + @FileDATE + '.txt')
DECLARE @FolderLocationA as varchar(200)
select @FolderLocationA = ('\\share\\Validation\FileA' + @FileDATE + '.txt')
DECLARE @FolderLocationB as varchar(200)
select @FolderLocationB = ('\\share\\Validation\FileB' + @FileDATE + '.txt')
DECLARE @TempTable Table(
[Path] varchar(300),
ShortPath varchar(300),
[Type] varchar(20),
DateCreated date,
DateLastAccessed date,
DateLastModified date,
Attributes int ,
size int)
INSERT INTO @TempTable
Execute dba.dbo.uspGetFileDetails @FolderLocation
INSERT INTO @TempTable
Execute dba.dbo.uspGetFileDetails @FolderLocationA
INSERT INTO @TempTable
Execute dba.dbo.uspGetFileDetails @FolderLocationB
Select * from @TempTable
[是](https://www.red-gate.com/simple-talk/sql/t-sql-programming/reading-and-writing-files-in- sql-server-using-t-sql /) – MatSnow
我不需要讀取文件。我只需要知道三個文件是否爲空。加上每天的文件名稱更改,因爲YYYYMMDD附加。 – NonProgrammer
在我第一次提到的問題下,評論中有一個鏈接。我現在改變了鏈接。應該可以根據需要調整用戶定義的功能。順便說一句:你明確地寫了「是」或「否」就夠了。 ;-) – MatSnow