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

Leer las respuestas

#1 Juan Carlos Leguizamon
25/11/2009 - 14:44 | Informe spam
La primera podría ser:
IF EXISTS (SELECT 1 FROM ApplyCollection WHERE ID1='ALGO' And ID233)
UPDATE ApplyCollection SET UpdateTime = GETDATE()
WHERE ID1='ALGO' And ID233
ELSE
INSERT INTO ApplyCollection (ID1, ID2, UpdateTime) VALUES ('ALGO', 333,
GETDATE())

En la segunda, la solución que se te ocurre es valida, solo que T-SQL
requiere que la subconsulta tenga un alias:
select count(*) from (select distinct * from [TableName]) AS x

Saludos,

Juan Carlos Leguizamon


"Juan Marcial" escribió en el mensaje
news:
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 similares