Saludos, mi consulta es la siguiente:
Deseo hacer correr un procedimiento almacenado de sql server (que si funciona) que se encuentra en un servidor diferente al mio.
El problema surge porque tiene que levantar un archivo que se encuentra en una unidad mapeada que es una carpeta dentro de mi servidor.
Repito, si el procedimiento se realiza desde el servidor sql server, se realiza perfectamente, pero al intentar ejecutar desde php se produce los siguientes errores:
Warning: mssql_execute() [function.mssql-execute]: message: No se puede realizar la carga masiva. El archivo "Z:\Encuestas\Contenido\xml\archivo.xml" no se puede abrir. Código de error del sistema operativo: 3(El sistema no puede encontrar la ruta especificada.). (severity 16) in C:\AppServ\www\ctgi\odk\procedimiento-almacenado.php on line 47
Warning: mssql_execute() [function.mssql-execute]: message: Error de INSERT porque las siguientes opciones SET tienen una configuración incorrecta: 'CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADDING'. Compruebe que las opciones SET son correctas y se pueden usar con vistas indizadas y/o índices en columnas calculadas y/o índices filtrados y/o notificaciones de consulta y/o métodos de tipo de datos XML y/u operaciones de índice espacial. (severity 16) in C:\AppServ\www\ctgi\odk\procedimiento-almacenado.php on line 47
Noten que en el primer mensaje de error hace referencia a la unidad "z" que esta mapeada.
Las opciones SET del segundo error furon controladas y se encuentra configuradas segun las opciones de sql server para trabajar con xml.
El codigo fuente del escript es el siguiente:
<?php
error_reporting(E_ALL);
// Conección a Base de Datos
$coneccionMssql = mssql_connect("EQUIPO", "USUARIO", "CONTRASEÑA") or die("No puedo conectarme a la Base de Datos");
// Selección de Base de Datos
$seleccioBdMssql = mssql_select_db("BASE_DE_DATOS") or die("No puedo seleccionar la Base de Datos");
// Inicio de Procedimiento almacenado
$declaracionProcedimiento = mssql_init("NOMBRE_DEL_PROCEDIMIENTO_ALMACENADO", $coneccionMssql) or die("No puedo llamar al procedimiento almacenado");
// Agregado de Parametros al Procedimiento Almacenado
$tpCd = 2;// Tipo
mssql_bind($declaracionProcedimiento, "@EncuTpCd", $tpCd, SQLINT4);
$nr = 6;// Número
mssql_bind($declaracionProcedimiento, "@EncuNr", $nr, SQLINT4);
$rutaXml = "Z:\\Encuestas\\Contenido\\xml\\archivo.xml";
mssql_bind($declaracionProcedimiento, "@EncuRutaXml", $rutaXml, SQLVARCHAR);
$versNr = 2;//version
mssql_bind($declaracionProcedimiento, "@EncuVersNr", $versNr, SQLINT1);
// Ejecución del procedimiento almacenado
$resultadoSql = mssql_execute($declaracionProcedimiento);
$numeroFilas = mssql_num_rows($resultadoSql);
if( $numeroFilas > 0 )
{
$row = mssql_fetch_array($resultadoSql);
foreach($row as $campo => $valor)
{
echo "campo: ".$campo." => valor: ".$valor." <br />";
}
//$campo = $row['campo'];
//$campo2 = $row['campo2'];
//LIBERAR RESULTADOS DEL BUFFER
mssql_free_result($resultadoSql);
//LIBERAR DECLARACIÓN DEL BUFFER
mssql_free_statement($declaracionProcedimiento);
}
?>
El procedimiento corriendo desde sql server es el siguiente:
[dbo].NOMBRE_DEL_PROCEDIMIENTO_ALMACENADO
@EncuTpCd int
, @EncuNr int
, @EncuRutaXml varchar(1000)
, @EncuVersNr smallint
y funciona correctamente.
Si alguien puede orientarme le estare muy agradecido.