Olá Pessoal,
Boa noite!
Lembram do post que eu fiz sobre Habilitando OLE Automation via T-SQL no SQL Server onde eu falei que iria postar sobre umas funções legais exemplificando a utilização do OLE Automation no SQL Server? Então, é esse o post 🙂
Para não colocar muitas Stored Procedures e Functions aqui no post e deixá-lo muito extenso, criei um arquivo compactado com o código-fonte dos scripts que estão disponíveis aqui e vou apenas explicar a utilização de cada um deles.
fncArquivo_Existe_FSOUtilização: SELECT CLR.dbo.fncArquivo_Existe_FSO(‘C:\Teste.txt’)
Código-fonte:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | CREATE FUNCTION [dbo].[fncArquivo_Existe_FSO] (@strArquivo VARCHAR(1000)) RETURNS INT  AS  BEGIN     DECLARE             @hr INT,         @objFileSystem INT,         @retorno INT,         @source VARCHAR(250),         @description VARCHAR(2000)     EXEC @hr = sp_OACreate         'Scripting.FileSystemObject',         @objFileSystem OUT     IF @hr <> 0     BEGIN         EXEC sp_OAGetErrorInfo             @objFileSystem,             @source OUT,             @description OUT         RETURN 0     END     EXEC @hr = sp_OAMethod         @objFileSystem,         'FileExists',         @retorno OUT,         @strArquivo     IF (@hr <> 0)     BEGIN         EXEC sp_OAGetErrorInfo             @objFileSystem,             @source OUT,             @description OUT         EXEC sp_OADestroy             @objFileSystem         RETURN 0     END     EXEC sp_OADestroy         @objFileSystem     RETURN @retorno END | 
Utilização: SELECT CLR.dbo.fncDiretorio_Existe_FSO(‘C:\Dirceu’)
Código-fonte:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | CREATE FUNCTION [dbo].[fncDiretorio_Existe_FSO] (@strDiretorio VARCHAR(1000)) RETURNS INT  AS  BEGIN     DECLARE             @hr INT,         @objFileSystem INT,         @retorno INT,         @source VARCHAR(250),         @description VARCHAR(2000)     EXEC @hr = sp_OACreate         'Scripting.FileSystemObject',         @objFileSystem OUT     IF @hr <> 0     BEGIN         EXEC sp_OAGetErrorInfo             @objFileSystem,             @source OUT,             @description OUT         RETURN 0     END     EXEC @hr = sp_OAMethod         @objFileSystem,         'FolderExists',         @retorno OUT,         @strDiretorio     IF (@hr <> 0)     BEGIN         EXEC sp_OAGetErrorInfo             @objFileSystem,             @source OUT,             @description OUT         EXEC sp_OADestroy             @objFileSystem         RETURN 0     END     EXEC sp_OADestroy         @objFileSystem     RETURN @retorno END | 
Utilização: SELECT * FROM CLR.dbo.fncLer_Arquivo_FSO(‘C:\Teste.txt’)
Código-fonte:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | CREATE FUNCTION [dbo].[fncLer_Arquivo_FSO] (@Ds_Arquivo VARCHAR(256)) RETURNS @Tabela_Final TABLE (Ds_Linha VARCHAR(8000)) AS BEGIN     DECLARE @OLEResult INT     DECLARE @FileSystemObject INT     DECLARE @FileID INT     DECLARE @Message VARCHAR (8000)     DECLARE @Tabela TABLE ( Ds_Linha varchar(8000) )     EXECUTE @OLEResult = sp_OACreate 'Scripting.FileSystemObject', @FileSystemObject OUT     IF @OLEResult <> 0     BEGIN         SET @Message = 'Scripting.FileSystemObject - Error code: ' + CONVERT (VARCHAR, @OLEResult)         INSERT INTO @Tabela_Final SELECT @Message         RETURN     END     EXEC @OLEResult = sp_OAMethod @FileSystemObject, 'OpenTextFile', @FileID OUT, @Ds_Arquivo, 1, 1     IF @OLEResult <> 0     BEGIN         SET @Message = 'OpenTextFile - Error code: ' + CONVERT (VARCHAR, @OLEResult)         INSERT INTO @Tabela_Final SELECT @Message         RETURN     END     EXECUTE @OLEResult = sp_OAMethod @FileID, 'ReadLine', @Message OUT     WHILE (@OLEResult >= 0)     BEGIN         INSERT INTO @Tabela(Ds_Linha) VALUES( @Message )         EXECUTE @OLEResult = sp_OAMethod @FileID, 'ReadLine', @Message OUT     END     EXECUTE @OLEResult = sp_OADestroy @FileID     EXECUTE @OLEResult = sp_OADestroy @FileSystemObject     INSERT INTO @Tabela_Final     SELECT Ds_Linha FROM @Tabela     RETURN END | 
Utilização: EXEC CLR.dbo.stpApaga_Arquivo_FSO ‘C:\Teste.txt’
Código-fonte:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | CREATE PROCEDURE [dbo].[stpApaga_Arquivo_FSO] (@strArquivo VARCHAR(1000)) AS  BEGIN     DECLARE             @hr INT,         @objFileSystem INT,         @source VARCHAR(250),         @description VARCHAR(2000)     EXEC @hr = sp_OACreate         'Scripting.FileSystemObject',         @objFileSystem OUT     IF @hr <> 0     BEGIN         EXEC sp_OAGetErrorInfo             @objFileSystem,             @source OUT,             @description OUT     END     IF (CLR.dbo.fncArquivo_Existe(@strArquivo) = 1)     BEGIN         EXEC @hr = sp_OAMethod             @objFileSystem,             'DeleteFile',             NULL,             @strArquivo     END     IF (@hr <> 0)     BEGIN         EXEC sp_OAGetErrorInfo             @objFileSystem,             @source OUT,             @description OUT         EXEC sp_OADestroy             @objFileSystem     END     EXEC sp_OADestroy         @objFileSystem END | 
Utilização: EXEC CLR.dbo.stpCopia_Arquivo_FSO ‘C:\Teste.txt’, ‘C:\Arquivos\Novo_Arquivo.log’, 1 — Vai sobrescrever se já existir (3º parâmetro)
Código-fonte:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | CREATE PROCEDURE [dbo].[stpCopia_Arquivo_FSO] (     @strOrigem VARCHAR(MAX),     @strDestino VARCHAR(MAX),     @sobrescrever INT = 0 ) AS BEGIN     IF (dbo.fncArquivo_Existe(@strOrigem) = 1 AND @strOrigem != @strDestino)     BEGIN         DECLARE                 @hr INT,             @objFileSystem INT,             @source VARCHAR(250),             @description VARCHAR(2000)         EXEC @hr = sp_OACreate             'Scripting.FileSystemObject',             @objFileSystem OUT         IF @hr <> 0         BEGIN             EXEC sp_OAGetErrorInfo                 @objFileSystem,                 @source OUT,                 @description OUT             RAISERROR('Object Creation Failed 0x%x, %s, %s',16,1,@hr,@source,@description)             RETURN         END         IF (dbo.fncArquivo_Existe(@strDestino) = 1)             IF (@sobrescrever = 1)                  EXEC dbo.stpApaga_Arquivo_FSO @strDestino             ELSE             BEGIN                 PRINT 'O arquivo de destino já existe e o parâmetro sobrescrever foi definido como NÃO'                 RETURN             END         EXEC @hr = sp_OAMethod             @objFileSystem,             'CopyFile',             NULL,             @strOrigem,             @strDestino         IF (@hr <> 0)         BEGIN             EXEC sp_OAGetErrorInfo                 @objFileSystem,                 @source OUT,                 @description OUT             EXEC sp_OADestroy                 @objFileSystem             RAISERROR('Method Failed 0x%x, %s, %s',16, 1, @hr, @source, @description)             PRINT @source             PRINT @description             RETURN         END         EXEC sp_OADestroy             @objFileSystem     END     ELSE         PRINT 'O arquivo de origem não existe ou é igual ao arquivo de destino' END  GO | 
Utilização: EXEC CLR.dbo.stpEscreve_Arquivo_FSO(‘C:\Teste.txt’, ‘Teste de Escrita em Arquivo’)
Código-fonte:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | CREATE PROCEDURE [dbo].[stpEscreve_Arquivo_FSO] (     @String VARCHAR(MAX),     @Ds_Arquivo VARCHAR(1501) ) AS BEGIN     DECLARE         @objFileSystem INT,         @objTextStream INT,         @objErrorObject INT,         @strErrorMessage VARCHAR(1000),         @Command VARCHAR(1000),         @hr INT     SET NOCOUNT ON     SELECT         @strErrorMessage = 'opening the File System Object'     EXECUTE @hr = sp_OACreate         'Scripting.FileSystemObject',         @objFileSystem OUT     IF @HR = 0         SELECT             @objErrorObject = @objFileSystem,             @strErrorMessage = 'Creating file "' + @Ds_Arquivo + '"'     IF @HR = 0         EXECUTE @hr = sp_OAMethod             @objFileSystem,             'CreateTextFile',             @objTextStream OUT,             @Ds_Arquivo,             2,             True     IF @HR = 0         SELECT             @objErrorObject = @objTextStream,             @strErrorMessage = 'writing to the file "' + @Ds_Arquivo + '"'     IF @HR = 0         EXECUTE @hr = sp_OAMethod             @objTextStream,             'Write',             NULL,             @String     IF @HR = 0         SELECT             @objErrorObject = @objTextStream,             @strErrorMessage = 'closing the file "' + @Ds_Arquivo + '"'     IF @HR = 0         EXECUTE @hr = sp_OAMethod             @objTextStream,             'Close'     IF @hr <> 0     BEGIN         DECLARE             @Source VARCHAR(255),             @Description VARCHAR(255),             @Helpfile VARCHAR(255),             @HelpID INT         EXECUTE sp_OAGetErrorInfo             @objErrorObject,             @source OUTPUT,             @Description OUTPUT,             @Helpfile OUTPUT,             @HelpID OUTPUT         SELECT             @strErrorMessage = 'Error whilst ' + COALESCE(@strErrorMessage, 'doing something') + ', ' + COALESCE(@Description, '')         RAISERROR (@strErrorMessage,16,1)     END     EXECUTE sp_OADestroy         @objTextStream     EXECUTE sp_OADestroy         @objTextStream END | 
Utilização: EXEC dbo.stpEscreve_Arquivo_V2_FSO(‘C:\Teste.txt’, ‘Teste de Escrita em Arquivo’)
Código-fonte:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | CREATE PROCEDURE [dbo].[stpEscreve_Arquivo_V2_FSO] (     @String VARCHAR(MAX),     @Ds_Arquivo VARCHAR(1501) ) AS BEGIN     SET NOCOUNT ON     DECLARE         @objFileSystem INT,         @objTextStream INT,         @objFolderExists INT,         @objErrorObject INT,         @strErrorMessage VARCHAR(1000),         @Folder VARCHAR(500) = REVERSE(RIGHT(REVERSE(@Ds_Arquivo), (LEN(@Ds_Arquivo) - CHARINDEX('\', REVERSE(@Ds_Arquivo), 1)) + 1)),         @hr INT     SELECT         @strErrorMessage = 'opening the File System Object'     EXECUTE @hr = sp_OACreate         'Scripting.FileSystemObject',         @objFileSystem OUT     IF @hr = 0         SELECT             @objErrorObject = @objFileSystem,             @strErrorMessage = 'Checking if the directory "' + @Folder + '" exists'     IF @hr = 0         EXECUTE @hr = sp_OAMethod             @objFileSystem,             'FolderExists',             @objFolderExists OUT,             @Folder     -- Folder does not exists. Need to create it     IF (@objFolderExists = 0)     BEGIN         IF @hr = 0             SELECT                 @objErrorObject = @objFileSystem,                 @strErrorMessage = 'Creating folder "' + @Folder + '"'         IF @hr = 0             EXECUTE @hr = sp_OAMethod                 @objFileSystem,                 'CreateFolder',                 @objFolderExists OUT,                 @Folder     END     IF @hr = 0         SELECT             @objErrorObject = @objFileSystem,             @strErrorMessage = 'Creating file "' + @Ds_Arquivo + '"'     IF @hr = 0         EXECUTE @hr = sp_OAMethod             @objFileSystem,             'CreateTextFile',             @objTextStream OUT,             @Ds_Arquivo,             2,             True     IF @hr = 0         SELECT             @objErrorObject = @objTextStream,             @strErrorMessage = 'writing to the file "' + @Ds_Arquivo + '"'     IF @hr = 0         EXECUTE @hr = sp_OAMethod             @objTextStream,             'Write',             NULL,             @String     IF @hr = 0         SELECT             @objErrorObject = @objTextStream,             @strErrorMessage = 'closing the file "' + @Ds_Arquivo + '"'     IF @hr = 0         EXECUTE @hr = sp_OAMethod             @objTextStream,             'Close'     EXECUTE sp_OADestroy         @objFileSystem     IF @hr <> 0     BEGIN         DECLARE             @Source VARCHAR(255),             @Description VARCHAR(255),             @Helpfile VARCHAR(255),             @HelpID INT         EXECUTE sp_OAGetErrorInfo             @objErrorObject,             @Source OUTPUT,             @Description OUTPUT,             @Helpfile OUTPUT,             @HelpID OUTPUT         SELECT             @strErrorMessage = 'Error whilst ' + COALESCE(@strErrorMessage, 'doing something') + ', ' + COALESCE(@Description, '')         RAISERROR (@strErrorMessage,16,1)     END END | 
Utilização: EXEC dbo.stpCria_Diretorio_FSO(‘C:\Dirceu’)
Código-fonte:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | CREATE PROCEDURE [dbo].[stpCria_Diretorio_FSO] (     @Folder VARCHAR(500) ) AS BEGIN     DECLARE         @objFileSystem INT,         @objFolderExists INT,         @objErrorObject INT,         @strErrorMessage VARCHAR(1000),         @hr INT     SET NOCOUNT ON     SELECT         @strErrorMessage = 'opening the File System Object'     EXECUTE @hr = sp_OACreate         'Scripting.FileSystemObject',         @objFileSystem OUT     IF @hr = 0         SELECT             @objErrorObject = @objFileSystem,             @strErrorMessage = 'Checking if the folder "' + @Folder + '" exists'     IF @hr = 0         EXECUTE @hr = sp_OAMethod             @objFileSystem,             'FolderExists',             @objFolderExists OUT,             @Folder     IF (@objFolderExists = 0)     BEGIN         IF @hr = 0             SELECT                 @objErrorObject = @objFileSystem,                 @strErrorMessage = 'Creating folder "' + @Folder + '"'         IF @hr = 0             EXECUTE @hr = sp_OAMethod                 @objFileSystem,                 'CreateFolder',                 @objFolderExists OUT,                 @Folder     END     EXECUTE sp_OADestroy         @objFileSystem     EXECUTE sp_OADestroy         @objFolderExists     IF @hr <> 0     BEGIN         DECLARE             @Source VARCHAR(255),             @Description VARCHAR(255),             @Helpfile VARCHAR(255),             @HelpID INT         EXECUTE sp_OAGetErrorInfo             @objErrorObject,             @Source OUTPUT,             @Description OUTPUT,             @Helpfile OUTPUT,             @HelpID OUTPUT         SELECT             @strErrorMessage = 'Error whilst ' + COALESCE(@strErrorMessage, 'doing something') + ', ' + COALESCE(@Description, '')         EXECUTE sp_OADestroy             @objErrorObject         RAISERROR (@strErrorMessage,16, 1)     END END | 
Utilização: EXEC CLR.dbo.stpInformacoes_Arquivo_FSO(‘C:\Teste.txt’)
Código-fonte:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | CREATE PROCEDURE [dbo].stpInformacoes_Arquivo_FSO(@strArquivo VARCHAR(255)) AS BEGIN     DECLARE         @hr INT,         @objFileSystem INT,         @objFile INT,         @ErrorObject INT,         @ErrorMessage VARCHAR(255),         @Path VARCHAR(255),--         @ShortPath VARCHAR(255),         @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 ''' + @strArquivo + '''',             @ErrorObject = @objFileSystem     IF @hr = 0         EXEC @hr = sp_OAMethod             @objFileSystem,             'GetFile',             @objFile OUT,             @strArquivo     IF @hr = 0         SELECT             @ErrorMessage = 'getting the attributes of ''' + @strArquivo + '''',             @ErrorObject = @objFile     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 ' + @ErrorMessage + ', ' + @Description         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 END | 
Utilização: EXEC CLR.dbo.stpMove_Arquivo_FSO ‘C:\Teste.txt’, ‘C:\Arquivos\Novo_Arquivo.log’, 1 — Vai sobrescrever se já existir (3º parâmetro)
Código-fonte:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | CREATE PROCEDURE [dbo].[stpMove_Arquivo_FSO] (     @strOrigem VARCHAR(MAX),     @strDestino VARCHAR(MAX),     @sobrescrever INT = 0 ) AS BEGIN     IF (dbo.fncArquivo_Existe(@strOrigem) = 1 AND @strOrigem != @strDestino)     BEGIN         DECLARE                 @hr INT,             @objFileSystem INT,             @source VARCHAR(250),             @description VARCHAR(2000)         EXEC @hr = sp_OACreate             'Scripting.FileSystemObject',             @objFileSystem OUT         IF @hr <> 0         BEGIN             EXEC sp_OAGetErrorInfo                 @objFileSystem,                 @source OUT,                 @description OUT             RAISERROR('Object Creation Failed 0x%x, %s, %s',16,1,@hr,@source,@description)             RETURN         END         IF (dbo.fncArquivo_Existe(@strDestino) = 1)             IF (@sobrescrever = 1)                  EXEC dbo.stpApaga_Arquivo_FSO @strDestino             ELSE             BEGIN                 PRINT 'O arquivo de destino já existe e o parâmetro sobrescrever foi definido como NÃO'                 RETURN             END         EXEC @hr = sp_OAMethod             @objFileSystem,             'CopyFile',             NULL,             @strOrigem,             @strDestino         IF (@hr <> 0)         BEGIN             EXEC sp_OAGetErrorInfo                 @objFileSystem,                 @source OUT,                 @description OUT             EXEC sp_OADestroy                 @objFileSystem             RAISERROR('Method Failed 0x%x, %s, %s',16, 1, @hr, @source, @description)             PRINT @source             PRINT @description             RETURN         END         ELSE BEGIN             EXEC dbo.stpApaga_Arquivo_FSO @strOrigem         END         EXEC sp_OADestroy             @objFileSystem     END     ELSE         PRINT 'O arquivo de origem não existe ou é igual ao arquivo de destino' END  | 
Viram como é fácil e simples? Agora vocês já podem brincar com arquivos sem se descabelar tendo que criar as funções e stored procedures usando C# e compilando o database CLR (Caso você queira utilizar o CLR para manipulação de arquivos ao invés do OLE Automation, O QUE EU RECOMENDO, acesse o post Como listar, ler, escrever, copiar e mover arquivos com o CLR (C#)).
De brinde, vou passar mais uma stored procedure pra vocês, que tem a função de a partir de um caminho de arquivo, separar o diretório e o arquivo em duas variáveis distintas:
stpArquivo_Separa_Nome_Diretorio:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | USE [CLR] GO CREATE PROCEDURE [dbo].[stpArquivo_Separa_Nome_Diretorio] (@strArquivo VARCHAR(1000), @str_DIR VARCHAR(500) OUT, @str_FILE VARCHAR(500) OUT) AS BEGIN     SET NOCOUNT ON     SELECT         @str_DIR = REVERSE(RIGHT(REVERSE(@strArquivo), (LEN(@strArquivo) - CHARINDEX('\', REVERSE(@strArquivo), 1)) + 1))     SELECT         @str_FILE = REVERSE(LEFT(REVERSE(@strArquivo), CHARINDEX('\', REVERSE(@strArquivo), 1) - 1)) END | 
Modo de utilização:
| 1 2 3 4 5 6 7 8 9 10 11 | DECLARE      @str_DIR VARCHAR(500),     @str_FILE VARCHAR(500) EXEC CLR.dbo.stpArquivo_Separa_Nome_Diretorio     @strArquivo = '\\servidor\Pasta 1\Diretorio 2\Arquivos\Nome do Arquivo - 20140614.xlsx', -- varchar(1000)     @str_DIR = @str_DIR OUTPUT, -- varchar(500)     @str_FILE = @str_FILE OUTPUT -- varchar(500) PRINT @str_DIR -- Vai imprimir na tela "\\servidor\Pasta 1\Diretorio 2\Arquivos\" PRINT @str_FILE -- Vai imprimir na tela "Nome do Arquivo - 20140614.xlsx" | 
Isso é tudo pessoal!
Até a próxima postagem.

 
																								 
																								 Portuguese
 Portuguese                 English
 English