May 12, 2016 at 3:23 pm
Comments posted to this topic are about the item Write to File
May 26, 2016 at 8:29 am
You can also modify the script to loop through rows in a temp table (selected as a single long concatenated string into the @Text variable) and repeatedly call the "writeLine" command ( [font="Courier New"]EXECUTE sp_OAMethod @FileID,'WriteLine',NULL,@Text[/font] ) to generate a formatted file that matches any output file requirements you need.
May 26, 2016 at 4:55 pm
Nice Script but sp_OAMethod scripts are old com+ object types. Do you have any other latest scripting way to do the same?
Thanks.
June 14, 2016 at 6:11 am
Here is a procedure that I wrote to encapsulate the error handling.
The test example is embedded in the comments
As with all software, It is a work in progress.
CREATE PROCEDURE [Tools].[TextFile] (
@Action SYSNAME = NULL, -- Open, Write, Close
@FileHandle XML = NULL OUTPUT,
@Buffer VARCHAR(MAX) = NULL
) AS
SET NOCOUNT ON;
/*
======================================================================================================================================
Author: MRyan
Created: 05/07/2016
Modified: 05/07/2016
Description: Write a file to the OS
Testing:
DECLARE @Filename VARCHAR(64) = 'C:\SQL\Scripts\Test',
@XFile XML = NULL;
EXECUTE Tools.TextFile [Open], @XFile OUTPUT, @Filename;
---
EXECUTE Tools.TextFile [Write], @XFile , '1One';
EXECUTE Tools.TextFile [Write], @XFile , '2Two';
EXECUTE Tools.TextFile [Write], @XFile , '3Three';
---
EXECUTE Tools.TextFile [Close], @XFile ;
--------------------------------------------------------------------------------------------------------------------------------------
EXECUTE ('EXEC sp_configure ''show advanced options'', 1; RECONFIGURE WITH OVERRIDE;');
EXECUTE ('EXEC sp_configure ''Ole Automation Procedures'',1; RECONFIGURE WITH OVERRIDE;');
EXECUTE ('EXEC sp_configure ''show advanced options'', 0; RECONFIGURE WITH OVERRIDE;');
======================================================================================================================================
*/
DECLARE
@FSO INT,
@RetVal INT,
@FID INT,
@Path SYSNAME = NULL,
@Name VARCHAR(255) = NULL;
----------------------------------------------------------------------
IF @Action = 'Open' BEGIN
SELECT @Name = LEFT(@Buffer,255);
----------------------------------------------------------------------
SELECT @Path = LEFT(@Name, LEN(@Name) - CHARINDEX('\',REVERSE(@Name)));
EXECUTE @RetVal = xp_create_subdir @Path;
IF @RetVal <> 0 RAISERROR('xp_create_subdir: Error Creating Path [%s]', 18, 1, @Path) WITH NOWAIT;
----------------------------------------------------------------------
-- create fso object
EXECUTE @RetVal = sp_OACreate 'Scripting.FileSystemObject', @FSO OUT;
IF @RetVal <> 0 RAISERROR('Scripting.FileSystemObject: Error Creating Object', 18, 1) WITH NOWAIT;
----------------------------------------------------------------------
-- Open a file
EXECUTE @RetVal = sp_OAMethod @FSO, 'OpenTextFile', @FID OUT, @Name, 2, 1; -- 2 write, 8 append
IF @RetVal <> 0 RAISERROR('Scripting.FileSystemObject: Error Opening File [s%]', 18, 1, @Name) WITH NOWAIT;
----------------------------------------------------------------------
SELECT @FileHandle = (SELECT @Name AS [@Name], @FSO AS [@FSO], @FID AS [@FID] FOR XML PATH('File'));
----
END ELSE BEGIN
SELECT
@Name = X.C.value('@Name', 'VARCHAR(255)'),
@FSO = X.C.value('@FSO', 'INT'),
@FID = X.C.value('@FID', 'INT')
FROM @FileHandle.nodes('/File') AS X(C);
END;
--======================================================================================================
IF @Action = 'Write' BEGIN
IF @Buffer IS NOT NULL BEGIN
----------------------------------------------------------------------
-- Write
EXECUTE @RetVal = sp_OAMethod @FID, 'WriteLine', Null, @Buffer;
IF @RetVal <> 0 RAISERROR('Scripting.FileSystemObject: Error Writing to File [s%]', 18, 1, @Buffer) WITH NOWAIT;
END;
END ELSE IF @Action = 'Close' BEGIN
----------------------------------------------------------------------
-- close file
EXECUTE @RetVal = sp_OAMethod @FID, 'Close';
IF @RetVal <> 0 RAISERROR('Scripting.FileSystemObject: Error Closing to File [s%]->[%i]', 18, 1, @Name, @FID) WITH NOWAIT;
----------------------------------------------------------------------
EXECUTE @RetVal = sp_OADestroy @FID;
IF @RetVal <> 0 RAISERROR('Scripting.FileSystemObject: Error Destroying File Handle [%i]', 18, 1, @FID) WITH NOWAIT;
--
EXECUTE @RetVal = sp_OADestroy @FSO;http://www.sqlservercentral.com/Forums/Skins/Classic/Images/RichTextBoxTable/tbl_bottomleft.gif
IF @RetVal <> 0 RAISERROR('Scripting.FileSystemObject: Error Destroying Object [%i]', 18, 1, @FSO) WITH NOWAIT;
END;
--------------------------------------------------------------------------------------------------------------------------------------
RETURN(0);
Viewing 4 posts - 1 through 3 (of 3 total)
You must be logged in to reply to this topic. Login to reply
This website stores cookies on your computer.
These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media.
To find out more about the cookies we use, see our Privacy Policy