Consultas SQL que Parecen Sencillas...

25/11/2009 - 14:04 por Juan Marcial | Informe spam
Buenas-

Como trabajo principalmente en otros lenguajes, conozco muy someramente el
lenguaje del SQL. Quisiera poder ejecutar una orden con el siguiente criterio
(muy simple)

“Si no existe en la tabla [ApplyCollection] un registro con claves ID=ALGO,
y ID233, créelo, de lo contrario actualice solo el campo UpdateTime con la
fecha / hora del servidor.

En primera instancia se me ocurre:

if (select * from [ApplyCollection] where ID1='ALGO' and ID233)=0
insert into [ApplyCollection] (ID1,ID2,UpdateTime)
values ('ALGO',333,(select { fn now() }))
else
update [_ApplyCollection] set UpdateTime=(select { fn now() })

Me devuelve el error:
Subqueries are not allowed in this context. Only scalar expressions are
allowed.


Segunda pregunta. Quisiera contar los registros que no se repiten en una
tabla. Se me ocurre algo simple como:

select count(*) from (select distinct * from [TableName])

Me devuelve error de sintaxis (que ignorancia la mía) ¿Cómo en una sola
genciana SQL obtengo los registros que no se repiten?

Agradeceré hasta la luna su sabios consejos...

Preguntas similare

Leer las respuestas

#6 Carlos Sacristan
25/11/2009 - 17:33 | Informe spam
Lo puedes comprobar tú mismo viendo el plan de ejecución de ambas consultas,
aunque intuyes bien.

Una cosa a tener en cuenta: ambas condiciones son contrarias. La primera es
verdadera si existe algún registro que cumpla esas condiciones; la segunda
es válida si NINGÚN registro cumple esas condiciones.

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Juan Marcial" wrote in message
news:
...Aprendí mucho hoy...

Solo una preguntita más ¿Que es mas eficiente en rendimiento?
(1)
IF EXISTS (SELECT 1 FROM ApplyCollection WHERE ID1='ALGO' And ID233) ...
(2)
IF (SELECT COUNT(*) FROM ApplyCollection WHERE ID1='ALGO' And ID233)=0
...

Bueno, imagino que la (1)...

Muchas gracias.
Juan Marcial
Ingeniero de Software


"Juan Marcial" wrote:

Buenas-

Como trabajo principalmente en otros lenguajes, conozco muy someramente
el
lenguaje del SQL. Quisiera poder ejecutar una orden con el siguiente
criterio
(muy simple)

“Si no existe en la tabla [ApplyCollection] un registro con claves
ID=ALGO,
y ID233, créelo, de lo contrario actualice solo el campo UpdateTime con
la
fecha / hora del servidor.

En primera instancia se me ocurre:

if (select * from [ApplyCollection] where ID1='ALGO' and ID233)=0
insert into [ApplyCollection] (ID1,ID2,UpdateTime)
values ('ALGO',333,(select { fn now() }))
else
update [_ApplyCollection] set UpdateTime=(select { fn now() })

Me devuelve el error:
Subqueries are not allowed in this context. Only scalar expressions are
allowed.


Segunda pregunta. Quisiera contar los registros que no se repiten en una
tabla. Se me ocurre algo simple como:

select count(*) from (select distinct * from [TableName])

Me devuelve error de sintaxis (que ignorancia la mía) ¿Cómo en una sola
genciana SQL obtengo los registros que no se repiten?

Agradeceré hasta la luna su sabios consejos...


Respuesta Responder a este mensaje
#7 Juan Marcial
25/11/2009 - 22:02 | Informe spam
Gracias. Me fue supremamente util.
Respuesta Responder a este mensaje
#8 Jose Antonio Martínez
28/11/2009 - 01:40 | Informe spam
Y que pasa con la instruccion merge, que nadie la utiliza?

"Juan Marcial" escribió en el mensaje de
noticias:
Buenas-

Como trabajo principalmente en otros lenguajes, conozco muy someramente el
lenguaje del SQL. Quisiera poder ejecutar una orden con el siguiente
criterio
(muy simple)

“Si no existe en la tabla [ApplyCollection] un registro con claves
ID=ALGO,
y ID233, créelo, de lo contrario actualice solo el campo UpdateTime con
la
fecha / hora del servidor.

En primera instancia se me ocurre:

if (select * from [ApplyCollection] where ID1='ALGO' and ID233)=0
insert into [ApplyCollection] (ID1,ID2,UpdateTime)
values ('ALGO',333,(select { fn now() }))
else
update [_ApplyCollection] set UpdateTime=(select { fn now() })

Me devuelve el error:
Subqueries are not allowed in this context. Only scalar expressions are
allowed.


Segunda pregunta. Quisiera contar los registros que no se repiten en una
tabla. Se me ocurre algo simple como:

select count(*) from (select distinct * from [TableName])

Me devuelve error de sintaxis (que ignorancia la mía) ¿Cómo en una sola
genciana SQL obtengo los registros que no se repiten?

Agradeceré hasta la luna su sabios consejos...


Respuesta Responder a este mensaje
#9 Carlos Sacristan
30/11/2009 - 13:56 | Informe spam
MERGE sólo está disponible en 2008. Si no se dice qué versión de SQL Server
se usa, habrá que dar una solución que funcione en cualquiera de ellas...

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Jose Antonio Martínez" wrote in message
news:
Y que pasa con la instruccion merge, que nadie la utiliza?

"Juan Marcial" escribió en el mensaje de
noticias:
Buenas-

Como trabajo principalmente en otros lenguajes, conozco muy someramente
el
lenguaje del SQL. Quisiera poder ejecutar una orden con el siguiente
criterio
(muy simple)

“Si no existe en la tabla [ApplyCollection] un registro con claves
ID=ALGO,
y ID233, créelo, de lo contrario actualice solo el campo UpdateTime con
la
fecha / hora del servidor.

En primera instancia se me ocurre:

if (select * from [ApplyCollection] where ID1='ALGO' and ID233)=0
insert into [ApplyCollection] (ID1,ID2,UpdateTime)
values ('ALGO',333,(select { fn now() }))
else
update [_ApplyCollection] set UpdateTime=(select { fn now() })

Me devuelve el error:
Subqueries are not allowed in this context. Only scalar expressions are
allowed.


Segunda pregunta. Quisiera contar los registros que no se repiten en una
tabla. Se me ocurre algo simple como:

select count(*) from (select distinct * from [TableName])

Me devuelve error de sintaxis (que ignorancia la mía) ¿Cómo en una sola
genciana SQL obtengo los registros que no se repiten?

Agradeceré hasta la luna su sabios consejos...


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