SQL Server has some standard stored procedures that allow OLE automation.
First step, is to check whether Ole Automation Procedures are enabled in SQL Server or not ? It can be enabled by simply executing below T-SQL commands.
T-SQL to enable Ole Automation Procedures in SQL Server
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
Next step is to create a stored procedure, which will use an OLE Automation procedures and create a folder on system drive
-- DATE : 23-Nov -- AUTHOR : Jitendra Zaa CREATE PROCEDURE [dbo].[CreateFolder] (@newfolder varchar(1000)) AS BEGIN DECLARE @OLEfolder INT DECLARE @OLEsource VARCHAR(255) DECLARE @OLEdescription VARCHAR(255) DECLARE @init INT DECLARE @OLEfilesytemobject INT -- it will fail if OLE automation not enabled EXEC @init=sp_OACreate 'Scripting.FileSystemObject', @OLEfilesytemobject OUT IF @init <> 0 BEGIN EXEC sp_OAGetErrorInfo @OLEfilesytemobject RETURN END -- check if folder exists EXEC @init=sp_OAMethod @OLEfilesytemobject, 'FolderExists', @OLEfolder OUT, @newfolder -- if folder doesnt exist, create it IF @OLEfolder=0 BEGIN EXEC @init=sp_OAMethod @OLEfilesytemobject, 'CreateFolder', @OLEfolder OUT, @newfolder END -- in case of error, raise it IF @init <> 0 BEGIN EXEC sp_OAGetErrorInfo @OLEfilesytemobject, @OLEsource OUT, @OLEdescription OUT SELECT @OLEdescription='Could not create folder: ' + @OLEdescription RAISERROR (@OLEdescription, 16, 1) END EXECUTE @init = sp_OADestroy @OLEfilesytemobject END
Its time to finally see OLE Automation in action. We would try to create three nested folders in tmp folder of c drive. Assumption is c:\tmp folder already exists.
Below code iterates through string which contains folder path @folderName and iteratively it will create folders using stored procedure CreateFolder.
--Prerequisite , make sure that @path exists on drive
DECLARE @path varchar(80) = 'C:\tmp',
@folderName varchar(100)= 'folder1\folder2\folder3\folder4',
@fullPath varchar(500),
@progressivePath varchar(500)
SET @fullPath = @path +'\'+@folderName
DECLARE @pos INT
DECLARE @len INT
DECLARE @curentFolder varchar(8000)
set @pos = 0
set @len = 0
SET @progressivePath = @path
--Loop through path and create folder iteratively
WHILE CHARINDEX('\', @folderName, @pos+1) > 0
BEGIN
set @len = CHARINDEX('\', @folderName, @pos+1) - @pos
set @curentFolder = SUBSTRING(@folderName, @pos, @len)
SET @progressivePath = @progressivePath + '\'+@curentFolder
PRINT @progressivePath
EXEC CreateFolder @progressivePath
set @pos = CHARINDEX('\', @folderName, @pos+@len) +1
END

Leave a Reply to WillowCancel reply