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,
-

Preguntas similare

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?
Respuesta Responder a este mensaje
#2 Alejandro Mesa
10/06/2005 - 16:16 | Informe spam
Cuando ejecutamos una sentencia insert / update / delete en sql server, por
defecto esta es considerada como una transaccion sin tener que usar "begin
transaction ... commit transaction / rollback transaction". SQL Server se
encarga de hacer el commit o el rollback automaticamente y eso es lo que
significa "Autocommit Transactions", la cual es la forma por defecto de
manejar transacciones en SQL Server. Si por el contrario definimos la
transaccion de forma explicita (usando begin transaction) o prendemos la
opcion "SET IMPLICIT_TRANSACTIONS" la cual funciona como si explicitamente
hubiesemos hecho un "begin transaction" y por lo tanto la sentencia no estara
completa hasta que hagamos hecho un "commit / rollback transaction".

En otras palabras, ejecutar la sentencia no es similar a que la sentencia
esta completa (la accion llevada a cabo por la sentencia), esta estara
completa cuando hagamos el commit o rollback de la transaccion, lo cual se
hace de forma automatica cuando sql server esta en modo autocommit o lo
hacemos nosotros de forma explicita cuando sql server esta en modo "SET
IMPLICIT_TRANSACTIONS ON" o nosotros empezamos la transaccion haciendo uso de
"begin transaction".


AMB

"**lisa**" wrote:

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,
-



Respuesta Responder a este mensaje
#3 **lisa**
12/06/2005 - 18:33 | Informe spam
Entiendo perfectamente , pero voy a ser un poco mas puntual en mi pregunta .
En el siguiente texto (relacionado con Java) se dice que "... Una
sentencia está completa cuando todas sus hojas de resultados y cuentas de
actualización han sido recuperadas..."
En este sentido ¿que vendria a ser "hojas de resultados" y que vendrian a
ser "cuentas de actualizacion"?

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,
-
"Todo los hombres mueren, pero son pocos los que han vivido".
"Alejandro Mesa" escribió en el
mensaje news:
Cuando ejecutamos una sentencia insert / update / delete en sql server,
por
defecto esta es considerada como una transaccion sin tener que usar "begin
transaction ... commit transaction / rollback transaction". SQL Server se
encarga de hacer el commit o el rollback automaticamente y eso es lo que
significa "Autocommit Transactions", la cual es la forma por defecto de
manejar transacciones en SQL Server. Si por el contrario definimos la
transaccion de forma explicita (usando begin transaction) o prendemos la
opcion "SET IMPLICIT_TRANSACTIONS" la cual funciona como si explicitamente
hubiesemos hecho un "begin transaction" y por lo tanto la sentencia no
estara
completa hasta que hagamos hecho un "commit / rollback transaction".

En otras palabras, ejecutar la sentencia no es similar a que la sentencia
esta completa (la accion llevada a cabo por la sentencia), esta estara
completa cuando hagamos el commit o rollback de la transaccion, lo cual se
hace de forma automatica cuando sql server esta en modo autocommit o lo
hacemos nosotros de forma explicita cuando sql server esta en modo "SET
IMPLICIT_TRANSACTIONS ON" o nosotros empezamos la transaccion haciendo uso
de
"begin transaction".


AMB

"**lisa**" wrote:

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,
-



Respuesta Responder a este mensaje
#4 **lisa**
12/06/2005 - 18:33 | Informe spam
Gracias por tu respuesta, pero acabo de hacer una repregunta al respecto en
este mismo hilo.

Saludos,
-
"Todo los hombres mueren, pero son pocos los que han vivido".
"Don Roque" escribió en el mensaje
news:
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?
Respuesta Responder a este mensaje
#5 Alejandro Mesa
13/06/2005 - 13:56 | Informe spam
No te se decir, puede que este perdido en la traduccion y ademas nunca he
trabajado con java.


AMB

"**lisa**" wrote:

Entiendo perfectamente , pero voy a ser un poco mas puntual en mi pregunta .
En el siguiente texto (relacionado con Java) se dice que "... Una
sentencia está completa cuando todas sus hojas de resultados y cuentas de
actualización han sido recuperadas..."
En este sentido ¿que vendria a ser "hojas de resultados" y que vendrian a
ser "cuentas de actualizacion"?

> 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,
-
"Todo los hombres mueren, pero son pocos los que han vivido".
"Alejandro Mesa" escribió en el
mensaje news:
> Cuando ejecutamos una sentencia insert / update / delete en sql server,
> por
> defecto esta es considerada como una transaccion sin tener que usar "begin
> transaction ... commit transaction / rollback transaction". SQL Server se
> encarga de hacer el commit o el rollback automaticamente y eso es lo que
> significa "Autocommit Transactions", la cual es la forma por defecto de
> manejar transacciones en SQL Server. Si por el contrario definimos la
> transaccion de forma explicita (usando begin transaction) o prendemos la
> opcion "SET IMPLICIT_TRANSACTIONS" la cual funciona como si explicitamente
> hubiesemos hecho un "begin transaction" y por lo tanto la sentencia no
> estara
> completa hasta que hagamos hecho un "commit / rollback transaction".
>
> En otras palabras, ejecutar la sentencia no es similar a que la sentencia
> esta completa (la accion llevada a cabo por la sentencia), esta estara
> completa cuando hagamos el commit o rollback de la transaccion, lo cual se
> hace de forma automatica cuando sql server esta en modo autocommit o lo
> hacemos nosotros de forma explicita cuando sql server esta en modo "SET
> IMPLICIT_TRANSACTIONS ON" o nosotros empezamos la transaccion haciendo uso
> de
> "begin transaction".
>
>
> AMB
>
> "**lisa**" wrote:
>
>> 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,
>> -
>>
>>
>>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida