Sentencias SQL completas

09/06/2005 - 22:03 por **lisa** | Informe spam
En el siguiente texto ¿alguien que fuera tan amable de explicarme de un modo
mas sencillo y con un ejemplo cuando es que "una sentencia esta completa" ?

Desactivar el modo Auto-entrega
-
Cuando se crea una conexión, está en modo auto-entrega. Esto significa que
cada sentencia SQL individual es tratada como una transación y será
automáticamente entregada justo después de ser ejecutada. (Para ser más
preciso, por defecto, una sentencia SQL será entregada cuando está completa,
no cuando se ejecuta. Una sentencia está completa cuando todas sus hojas de
resultados y cuentas de actualización han sido recuperadas. Sin embargo, en
la mayoría de los casos, una sentencia está completa, y por lo tanto,
entregada, justo después de ser ejecutada).
La forma de permitir que dos o más sentencia sean agrupadas en una
transación es desactivar el modo auto-entrega. Esto se demuestra en el
siguiente código, donde con es una conexión activa.
con.setAutoCommit(false);


Saludos,
-
 

Leer las respuestas

#1 Don Roque
09/06/2005 - 23:10 | Informe spam
creo que con esto te va a quedar claro

imaginate que vos ejecutas esto (parada sobre la base northwind):

select * into tablanueva from customers

El SQL SERVER tiene que realizar tres pasos para esto
1) crear la tabla "tablanueva"
2) seleccionar los datos de la tabla CUSTOMERS
3) insertarlos en la tabla "tablanueva"

Ahora bien, como vos estas haciendo todo en la misma instruccion, "la
sentencia va a estar completa" cuando se hayan ejecutado los tres
pasos. Cualquier problema que suceda al ejecutar esta instruccion (por
ejemplo, que ya exista una tabla con el nombre "tablanueva") va a hacer
que NINGUNO de los tres pasos se ejecute.

Vamos a otro ejemplo,

supone este script

use northwind
go

create table #temp
(
cid varchar(2) primary key
)

insert into #temp select substring(customerid, 1, 2) from customers

en este caso, lo que estoy haciendo es crear una tabla temporal en una
instruccion y en la siguiente, hacer un select e insertarlo en la tabla
temporal recientemente creada.
Ahora, si tiras el script, vas a ver que va a haber registros que
generan duplicados. Vas a ver que en la tabla temporal no va a haber
ningun registro. ¿por que? porque la instruccion deberia ejecutarse de
manera completa o no ejecutarse. El SELECT devuelve 91 Rows, pero
muchas de ellas son repetidas. Entonces, como algunos rows no pueden
ser insertados, no se inserta ninguno.

Queda claro?

Preguntas similares