Buenas a todos, resulta que tengo un problema para insertar unos datos y es que cuando el volumen de la transaccion es muy grande, los datos desde php no se guardan, le hago un echo a la transaccion y copiando y pegando todo en el motor de base de datos (SQL SERVER 2005), la transaccion si se ejecuta correctamente y los datos se guardan..
Mi pregunta es, existe un limite para la insercion de datos en bloque?.....
Aca muestro como hago la transaccion:
Primero la clase conectar (archivo connect):
Código PHP:
Ver original<?php
class Conectar {
public $result;
public $numRows,$numFields;
protected $myServer,$myUser,$myPass,$myDB,$s,$conn;
function Conectar($myServer,$myUser,$myPass,$myDB){
//header('Content-Type: text/xml; charset=ISO-8859-1');
$this->myServer = "miservidor";
$this->myUser = $myUser;
$this->myPass = $myPass;
$this->myDB = $myDB;
$connectionInfo = array( "Database"=>$myDB,"UID"=>$myUser,"PWD"=>$myPass); $this->conn = sqlsrv_connect( $this->myServer, $connectionInfo);
if(!$this->conn)
{
//die( print_r( sqlsrv_errors(), true));
die( print_r("<h1>La contraseña es incorrecta!!!</h1>", true)); //die( print_r( sqlsrv_errors(), true));
}
}
function transac(){
sqlsrv_begin_transaction($this->conn);
}
function fin(){
sqlsrv_commit($this->conn);
}
function consulta($query){
$result = sqlsrv_query
($this->conn,$query, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET
)); $this-> numRows = sqlsrv_num_rows($result);
$this-> numFields = sqlsrv_num_fields($result);
$this-> result = $result;
}
function errores(){
sqlsrv_errors();
}
//con esta funcion ejecuto la transaccion
function accion($query){
if( sqlsrv_query( $this->conn, $query))
{
$r = true;
}
else{
echo "Error in statement execution.\n";
$r = false;
}
return $r;
}
} //fin clase
?>
Ahora la transaccion:
Código PHP:
Ver original<?php
require('connect.php');
$obj = new Conectar($myServer,$myUser,$myPass,$myDB);
$sql2="BEGIN TRANSACTION
BEGIN TRY
declare @consec char(10)
declare @temp int
";
$sql2=$sql2."set @consec = (select max(HCECONSEC) from hcepicrisis)
set @temp = convert(int,@consec)
set @consec = convert(char(10),@temp)
set @consec = replicate('0' ,10-LEN(@consec))+@consec";
$x = new SimpleXMLElement($archivo, null, true);
$i=1;
foreach($x->evolucion as $evolucion)
{
$fechaepi=$evolucion['fecha'];
$codparam=$evolucion['codparam'];
// $elemento=$evolucion->elemento;
$descripcion=$evolucion->descripcion;
// $descripcion=$elemento."".$punto."".$descripcion;
$sql2=$sql2." INSERT INTO HCEPICRIDET VALUES (@consec, '".$fechaepi."', '".$descripcion."', '".$i."', '".$codparam."')";
$i++;
}
$sql2=$sql2. "SELECT '1' AS RES
COMMIT TRANSACTION BEGIN TRANSACTION END TRY BEGIN CATCH ROLLBACK TRANSACTION
INSERT INTO HCERRORTRAN VALUES ('".$ingreso."', 'EPICRISIS', '".$cedula."', ERROR_MESSAGE(), '".$medico."', '".$fechor."')
END CATCH
";
//con la siguiente linea ejecuto la transaccion
$result2=$obj->accion($sql2);
?>
Por ejempl cuando son mas de 600 filas las que se insertan en una tabla, la transaccion no me guarda nada, pero menos de 600 filas si guarda
Porque se presenta este problema y de q manera podria solucionarlo?
Agradezco la colaboración o algun enlace donde pueda encontrar información