on 05-20-2016 6:43 PM
Buen día compañeros.
De nuevo con un detalle de SQL: En nuestro sistema se genera un archivo de texto con fines de facturación electrónica, todo se hace por medio de procedimientos almacenados y hasta el momento no se han tenido detalles al respecto pero ahora que se están realizando pruebas en un nuevo server, el TXT no se genera cuando se especifica una ruta destino diferente al Servidor Local, es decir, si le especifico una ruta destino que direccione al mismo servidor, el TXT se genera sin problemas pero si pongo una ruta fuera del servidor, el TXT no se genera enviando el error mencionado.
El SQl Server del server problematico es:
Windows Server 2012
SQL Server 2014
El SQL Server donde se está trabajando de manera normal es:
Windows server 2008
SQL Server 2008
Agradezco cualquier aportación al respecto.
Saludos Gerardo, ya validaste que tenga los permisos de red necesario para poder escribir el archivo en la ruta que mencionas.
Una duda mas: El error que mencionas lo genera SAP?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Aquí está el SP:
USE [BaseDeDatos]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spWriteStringToFile]
(
@String nvarchar(MAX), --8000 in SQL Server 2000
@Path VARCHAR(254),
@Filename VARCHAR(254)
)
AS
DECLARE @objFileSystem int
,@objTextStream int,
@objErrorObject int,
@strErrorMessage Varchar(1000),
@Command varchar(1000),
@hr int,
@fileAndPath varchar(255)
set nocount on
select @strErrorMessage = 'opening the File System Object'
EXECUTE @hr = sp_OACreate 'Scripting.FileSystemObject', @objFileSystem OUT
Select @FileAndPath = @path + '\' + @filename
if @hr = 0 Select @objErrorObject = @objFileSystem, @strErrorMessage = 'Creating file "' + @FileAndPath + '"'
if @hr = 0 EXECUTE @hr = sp_OAMethod @objFileSystem, 'CreateTextFile', @objTextStream OUT, @FileAndPath,2,False
if @hr = 0 Select @objErrorObject = @objTextStream, @strErrorMessage = 'writing to the file "' + @FileAndPath + '"'
if @hr = 0 EXECUTE @hr = sp_OAMethod @objTextStream, 'Write', Null, @String
if @hr = 0 Select @objErrorObject = @objTextStream, @strErrorMessage = 'closing the file "' + @FileAndPath + '"'
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
En la linea donde te marca el error debe sacarte este dato haciendo referencia al PATH y nombre de archivo.
'Creating file "' + @FileAndPath + '"'
Por lo que regreso a lo mismo, tienes algún detalle con la ruta o permisos. Puedes poner la parte donde mandas esos parametros invocando el SP?
Gracias
Creo lo mismo que tu pero no se qué más permisos asignar, si le mando parámetros fijos con la ruta de red, me manda el error 50000:
DECLARE @return_value int
EXEC @return_value = [dbo].[NU3_CFD_spWriteStringToFile_NU3]
@String = 'encabezado',
@Path = '\\CFDiEquipo\ProyectoCFDI\TEMPs',
@Filename = 'Archivo.TXT'
Mens 50000, Nivel 16, Estado 1, Procedimiento spWriteStringToFile, Línea 552
Error whilst Creating file "\\CFDiEquipo\ProyectoCFDI\TEMPs\Archivo.TXT",
Pero si voy a la misma ruta, desde el explorador de windows y creo un nuevo archivo, me lo crea sin problemas.
Seguiré haciendo pruebas pero en definitiva creo lo mismo que tu, algo debe de estar faltando entre la comunicación de ambos servers.
Gracias por tu tiempo.
Gerardo,
Desde el servidor donde se ejecuta el código/procedimiento si puedes abrir la ruta destino usando Explorer de Windows? De ser así, verifica que puedas crear archivos en ja carpets desayuno (no vaya ser tenga de permisos de carpeta compartida)
Probaste ejecutar el procedimiento manualmente desde el SQL Server Management Estudio y tampoco se crea?
Otra posible causa podría ser el Firewall o antivirus de alguno de los servidores.
Saludos,
JC.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hola Juan Carlos.
Como lo comento al compañero Julian, las rutas tienen los permisos necesarios, de hecho utilizo la misma ruta a donde envío los TXT productivos.
He probado bajando el Firewall de ambos equipos y aun sigue marcando el mismo error.
Intentando crear el archivo pasando los parámetros directamente a SQL me arroja el siguiente error:
Mens 50000, Nivel 16, Estado 1, Procedimiento spWriteStringToFile, Línea 552
Error whilst Creating file "Nombre y ruta del archivo"
Veo que el error 50000 hace referencia a la instrucción "raiserror" que se utiliza en el procedimiento "spWriteStringToFile" pero no comprendo que tiene que ver con las ubicaciones de red.
Gracias por su apoyo.
Si intentas mapeando esa carpeta compartida a Z: o Y: ubotea, dentro de tu servidor y esa la usas para tu código/pruebas?
En otros casos he podido crear archivos con SQL hacia otros equipos de la misma red pero con otro procedimiento de SQL. Y usé la ruta de red, sin embargo en tu caso intenta con lo que te comento, no he investigado pero tal vez exista alguna restricción para la función que comentas...
Hola compañero.
He realizado cuanta acción me han recomendado y no he logrado la creación del archivo fuera del equipo local.
Estoy evaluando con la persona de desarrollo el hecho de crear un servicio que esté monitoreando una carpeta local y los archivos que contenga los envíe a la carpeta de red correspondiente.
Creo que debe ser asunto de SQL Server 2014 ya que desde el explorador de archivos puedo crear documentos de un equipo a otro sin restricciones.
Gracias por el seguimiento.
User | Count |
---|---|
99 | |
12 | |
11 | |
6 | |
6 | |
4 | |
3 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.