一、存储过程创建语句如下:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <moki>
-- Create date: <20140610>
-- Description: <获取磁盘文件大小>
-- @mode值为0表示输出覆盖原有文件的内容
-- 值不为0表示输出不覆盖原有文件内容
-- =============================================
CREATE PROCEDURE sp_GetFileSize
-- Add the parameters for the stored procedure here
@resourcefilepath VARCHAR(1024),
@resultpath VARCHAR(1024),
@mode INT=0
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
--确定xp_cmdshell是可用的
-- ---------------------------------------------------------
-- EXEC master.dbo.sp_configure 'show advanced options', 1
-- GO
-- RECONFIGURE
-- GO
-- EXEC master.dbo.sp_configure 'xp_cmdshell', 1
-- GO
-- RECONFIGURE
-- GO
---------------------------------------------------------
DECLARE @bat VARCHAR(1024)
DECLARE @result INT
DECLARE @ret INT
EXEC master.dbo.xp_fileexist @resourcefilepath,@result out
SET @ret=0
IF @result=1
BEGIN
IF @mode=0
BEGIN
SET @bat='for /f %i in ('+'"'+@resourcefilepath+'"'+') do @echo %~ni%~xi:%~zi>'+@resultpath
END
ELSE
BEGIN
SET @bat='for /f %i in ('+'"'+@resourcefilepath+'"'+') do @echo %~ni%~xi:%~zi>>'+@resultpath
END
EXEC master.dbo.xp_cmdshell @bat
SET @ret=0
END
ELSE
BEGIN
PRINT @resourcefilepath+'不存在'
SET @ret=-1
END
RETURN @ret
END
GO
二、使用举例如下:
declare @filepath varchar(1024)
declare @resultpath varchar(1024)
set @filepath='D:\useful\批处理制作wifi热点\批处理制作wifi热点.docx'
set @resultpath='c:\sqlresult.txt'
EXEC MASTER.DBO.sp_GetFileSize @filepath,@resultpath,0