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; $this->conn = sqlsrv_connect( $this->myServer, $connectionInfo); if(!$this->conn) { //die( print_r( sqlsrv_errors(), true)); //die( print_r( sqlsrv_errors(), true)); } } function transac(){ sqlsrv_begin_transaction($this->conn); } function fin(){ sqlsrv_commit($this->conn); } function consulta($query){ $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