Realizando Deletes con alias

06/11/2007 - 14:54 por Branko | Informe spam
Hola A todos:

El problema es bastante sencillo, utilizando alias me es posible realizar
tareas de select, sin embargo cuando deseo realizar un deletecon alias me
resonde con el error:

Mens. 102, Nivel 15, Estado 1, Línea 1
Sintaxis incorrecta cerca de 'a'.

la sentencia SQL es:
delete from tabla a where a.campo='valor'

Si ejectuto la sentencia sin alias (a, este funciona sim problemas)

Estoy trabajando con SQL 2005 x64 Enterprise y Service Pack 2, que en teoría
corrige este problema..
http://support.microsoft.com/kb/913371 que se encuentra en el Sp2 y c
laramente funciona con el select.

Alguna sugerencia?, tral vez la sintaxis en SQL 2005 no es la que estoy
usando?

Muchas Gracias

Preguntas similare

Leer las respuestas

#1 Leonardo Azpurua
06/11/2007 - 15:50 | Informe spam
"Branko" escribió en el mensaje
news:
Hola A todos:

El problema es bastante sencillo, utilizando alias me es posible realizar
tareas de select, sin embargo cuando deseo realizar un deletecon alias me
resonde con el error:

Mens. 102, Nivel 15, Estado 1, Línea 1
Sintaxis incorrecta cerca de 'a'.

la sentencia SQL es:
delete from tabla a where a.campo='valor'

Si ejectuto la sentencia sin alias (a, este funciona sim problemas)

Estoy trabajando con SQL 2005 x64 Enterprise y Service Pack 2, que en
teoría
corrige este problema..
http://support.microsoft.com/kb/913371 que se encuentra en el Sp2 y c
laramente funciona con el select.

Alguna sugerencia?, tral vez la sintaxis en SQL 2005 no es la que estoy
usando?



Hola.

La sintaxis suministrada en los BOL (para SQL 2000) establece una diferencia
entre el elemento sintáctico <table_name> que debe usarse en la instruccion
DELETE, y el elemento <table_source> que se usa tanto en los SELECT como en
el segundo FROM de la instrucción DELETE. Este adminte alias, mientras que
el primero requiere un nombre de tabla o la función OPENDATASOURCE.

Es decir que, formalmente y hasta donde entiendo, no hay manera de usar
alias en la tabla objeto de las eliminaciones.

En tu ejemplo basta con suprimir el alias, que de paso no hace ninguna
falta.

Nada impide que uses alias en cualquier subconsulta que debas hacer en el
WHERE.

Salud!
Respuesta Responder a este mensaje
#2 Branko
06/11/2007 - 16:01 | Informe spam
Muchas Gracias Leonardo, en efecto, si no utilizas alias es posible realizar
el delete,sin embargo mi duda era la posibilidad (porque posoblemente el
desarrollador tenia un T-SQL escito así) si se podía "modificar" adgún
parametro dentro del SQL para que acepte esta sintaxis.

Muchas Gracias por confirmar la manera operacional

Saludos!

"Leonardo Azpurua" wrote:


"Branko" escribió en el mensaje
news:
> Hola A todos:
>
> El problema es bastante sencillo, utilizando alias me es posible realizar
> tareas de select, sin embargo cuando deseo realizar un deletecon alias me
> resonde con el error:
>
> Mens. 102, Nivel 15, Estado 1, Línea 1
> Sintaxis incorrecta cerca de 'a'.
>
> la sentencia SQL es:
> delete from tabla a where a.campo='valor'
>
> Si ejectuto la sentencia sin alias (a, este funciona sim problemas)
>
> Estoy trabajando con SQL 2005 x64 Enterprise y Service Pack 2, que en
> teoría
> corrige este problema..
> http://support.microsoft.com/kb/913371 que se encuentra en el Sp2 y c
> laramente funciona con el select.
>
> Alguna sugerencia?, tral vez la sintaxis en SQL 2005 no es la que estoy
> usando?

Hola.

La sintaxis suministrada en los BOL (para SQL 2000) establece una diferencia
entre el elemento sintáctico <table_name> que debe usarse en la instruccion
DELETE, y el elemento <table_source> que se usa tanto en los SELECT como en
el segundo FROM de la instrucción DELETE. Este adminte alias, mientras que
el primero requiere un nombre de tabla o la función OPENDATASOURCE.

Es decir que, formalmente y hasta donde entiendo, no hay manera de usar
alias en la tabla objeto de las eliminaciones.

En tu ejemplo basta con suprimir el alias, que de paso no hace ninguna
falta.

Nada impide que uses alias en cualquier subconsulta que debas hacer en el
WHERE.

Salud!



Respuesta Responder a este mensaje
#3 Isaias
06/11/2007 - 17:47 | Informe spam
Podrias decirnos CUAL ES EL OBJETIVO de utlizar "alias" en el DELETE?
Saludos
IIslas


"Branko" wrote:

Hola A todos:

El problema es bastante sencillo, utilizando alias me es posible realizar
tareas de select, sin embargo cuando deseo realizar un deletecon alias me
resonde con el error:

Mens. 102, Nivel 15, Estado 1, Línea 1
Sintaxis incorrecta cerca de 'a'.

la sentencia SQL es:
delete from tabla a where a.campo='valor'

Si ejectuto la sentencia sin alias (a, este funciona sim problemas)

Estoy trabajando con SQL 2005 x64 Enterprise y Service Pack 2, que en teoría
corrige este problema..
http://support.microsoft.com/kb/913371 que se encuentra en el Sp2 y c
laramente funciona con el select.

Alguna sugerencia?, tral vez la sintaxis en SQL 2005 no es la que estoy
usando?

Muchas Gracias

Respuesta Responder a este mensaje
#4 Leonardo Azpurua
06/11/2007 - 18:04 | Informe spam
"Isaias" escribió en el mensaje
news:
Podrias decirnos CUAL ES EL OBJETIVO de utlizar "alias" en el DELETE?



Hola.

Ahora sé que no funciona, pero alguna vez intenté escribir cosas del tipo
de:

DELETE FROM Detalles As D
WHERE NOT D.CodigoItem IN
(SELECT Codigo FROM Productos
WHERE Codigo = D.CodigoItem)

Si uno viene de usar gestores donde esa cláusula representa una diferencia
considerable en el rendimiento, puede llegar a creer que resulte necesaria.

Es sólo una explicación. Puede estar basada en premisas incorrectas, pero es
una explicación perfectamente razonable.

No hacía falta gritarle al hombre...


Salud!
Respuesta Responder a este mensaje
#5 Isaias
06/11/2007 - 23:01 | Informe spam
Eso lo puedes hacer con:

DELETE tabla
FROM Tu consulta con JOIN
Saludos
IIslas


"Leonardo Azpurua" wrote:


"Isaias" escribió en el mensaje
news:
> Podrias decirnos CUAL ES EL OBJETIVO de utlizar "alias" en el DELETE?

Hola.

Ahora sé que no funciona, pero alguna vez intenté escribir cosas del tipo
de:

DELETE FROM Detalles As D
WHERE NOT D.CodigoItem IN
(SELECT Codigo FROM Productos
WHERE Codigo = D.CodigoItem)

Si uno viene de usar gestores donde esa cláusula representa una diferencia
considerable en el rendimiento, puede llegar a creer que resulte necesaria.

Es sólo una explicación. Puede estar basada en premisas incorrectas, pero es
una explicación perfectamente razonable.

No hacía falta gritarle al hombre...


Salud!



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida