我们有一个接口,它具有以下名称格式创建日常三个文件:检查文件内容的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