Obtener el valor maximo de una columna

16/11/2005 - 19:15 por carlos | Informe spam
Buenas a todos.
Tengo el siguiente problema quiero obtener el valor maximo de una tabla.
Ejemplo:(TRIGGER)


update TABLA1
set CFIcodsbo = (select max(CardCode) + 1 from SERVIDOR.BD.dbo.OCRD)
where AccountId = (@id)

Como veis lo que quiero es actualizar un registro con el valor obtenido de
otro servidor.
Creo q falla por que la consulta select max no que tipo de dato de vuelve y
creo q no es compatible con CFIcodsbo (int)

He intentado tambien declarar una variable del tipo int y asignar la select
pero tampoco funciona.
Tendre que usar algún cursor para obtener el dato???
Un saludo.
Carlos

Preguntas similare

Leer las respuestas

#1 A.Poblacion
17/11/2005 - 11:07 | Informe spam
"carlos" wrote in message
news:
Buenas a todos.
Tengo el siguiente problema quiero obtener el valor maximo de una tabla.
Ejemplo:(TRIGGER)


update TABLA1
set CFIcodsbo = (select max(CardCode) + 1 from SERVIDOR.BD.dbo.OCRD)
where AccountId = (@id)

Como veis lo que quiero es actualizar un registro con el valor obtenido de
otro servidor.
Creo q falla por que la consulta select max no que tipo de dato de vuelve


y
creo q no es compatible con CFIcodsbo (int)

He intentado tambien declarar una variable del tipo int y asignar la


select
pero tampoco funciona.
Tendre que usar algún cursor para obtener el dato???



Pregunta: ¿La tabla está vacía? Porque en ese caso, el select max(...) te
devolverá NULL (lo mismo que si no hay ningún AccountId que tenga el valor
@id).
De lo contrario, el Select Max(Campo) te devolverá el mismo tipo que tenga
Campo, es decir, que si CardCode es INT, deberías poder meterlo en CFIcodsbo
que también es INT.
Respuesta Responder a este mensaje
#2 carlos
17/11/2005 - 11:25 | Informe spam
Ante todo gracias por la contestación , pero me sigue dando problemas.
La tabla contiene datos.
Mira ahora he cambiado esto en el trigger.
declare @i as Int
set @i = (select max(CardCode) from SERVIDOR.BD.dbo.OCRD)

Esta consulta funciona en el SQL query analyzer, desde el servidor donde
está alojado el trigger , pero cuando lo inserto en el trigger no funciona.

Tambien he registrado el servidor "SERVIDOR" mediante el procedimiento
almacenado sp_addlinkedserver

USE master
GO
EXEC sp_addlinkedserver
'SERVIDOR',
N'SQL Server'
GO

No entiendo como no funciona.
Gracias por todo.
Carlos

"A.Poblacion" escribió:

"carlos" wrote in message
news:
> Buenas a todos.
> Tengo el siguiente problema quiero obtener el valor maximo de una tabla.
> Ejemplo:(TRIGGER)
>
>
> update TABLA1
> set CFIcodsbo = (select max(CardCode) + 1 from SERVIDOR.BD.dbo.OCRD)
> where AccountId = (@id)
>
> Como veis lo que quiero es actualizar un registro con el valor obtenido de
> otro servidor.
> Creo q falla por que la consulta select max no que tipo de dato de vuelve
y
> creo q no es compatible con CFIcodsbo (int)
>
> He intentado tambien declarar una variable del tipo int y asignar la
select
> pero tampoco funciona.
> Tendre que usar algún cursor para obtener el dato???

Pregunta: ¿La tabla está vacía? Porque en ese caso, el select max(...) te
devolverá NULL (lo mismo que si no hay ningún AccountId que tenga el valor
@id).
De lo contrario, el Select Max(Campo) te devolverá el mismo tipo que tenga
Campo, es decir, que si CardCode es INT, deberías poder meterlo en CFIcodsbo
que también es INT.



Respuesta Responder a este mensaje
#3 A.Poblacion
17/11/2005 - 13:06 | Informe spam
"carlos" wrote in message
news:
Ante todo gracias por la contestación , pero me sigue dando problemas.
La tabla contiene datos.
Mira ahora he cambiado esto en el trigger.
declare @i as Int
set @i = (select max(CardCode) from SERVIDOR.BD.dbo.OCRD)

Esta consulta funciona en el SQL query analyzer, desde el servidor donde
está alojado el trigger , pero cuando lo inserto en el trigger no


funciona.

En teoría debería de funcionar. ¿Cuál es el error que sale?
Supongo que ya habrás comprobado que no sea un problema de permisos, es
decir, que cuando pruebas la operación que dispara el trigger la pruebas con
las mismas credenciales que utilizaste para probar la consulta desde el
Query Analizer. ¿Es asi?

Por cierto, ahora que lo pienso, ¿Se puede poner dentro de un trigger
una llamada a un servidor enlazado? Lo digo porque todas las operaciones
realizadas dentro del trigger tienen lugar dentro de la misma transacción
que dio lugar al disparo del trigger, y dudo que esté previsto que estas
transacciones puedan ser distribuidas entre varios servidores. Podrías hacer
la prueba de meter en el trigger la misma consulta pero haciendo el select
max contra otra tabla de la misma base de datos, a ver si así funciona, para
comprobar si el error efectivamente es debido al uso de un servidor
enlazado.
Respuesta Responder a este mensaje
#4 carlos
17/11/2005 - 16:10 | Informe spam
Gracias por contestar pero hemos cambiado el diseño, de todas maneras tendré
que probarlo ya que me he quedado con la curiosidad.
Muchas gracias .
Carlos

"A.Poblacion" escribió:

"carlos" wrote in message
news:
> Ante todo gracias por la contestación , pero me sigue dando problemas.
> La tabla contiene datos.
> Mira ahora he cambiado esto en el trigger.
> declare @i as Int
> set @i = (select max(CardCode) from SERVIDOR.BD.dbo.OCRD)
>
> Esta consulta funciona en el SQL query analyzer, desde el servidor donde
> está alojado el trigger , pero cuando lo inserto en el trigger no
funciona.

En teoría debería de funcionar. ¿Cuál es el error que sale?
Supongo que ya habrás comprobado que no sea un problema de permisos, es
decir, que cuando pruebas la operación que dispara el trigger la pruebas con
las mismas credenciales que utilizaste para probar la consulta desde el
Query Analizer. ¿Es asi?

Por cierto, ahora que lo pienso, ¿Se puede poner dentro de un trigger
una llamada a un servidor enlazado? Lo digo porque todas las operaciones
realizadas dentro del trigger tienen lugar dentro de la misma transacción
que dio lugar al disparo del trigger, y dudo que esté previsto que estas
transacciones puedan ser distribuidas entre varios servidores. Podrías hacer
la prueba de meter en el trigger la misma consulta pero haciendo el select
max contra otra tabla de la misma base de datos, a ver si así funciona, para
comprobar si el error efectivamente es debido al uso de un servidor
enlazado.



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