Funciones escalares en Sql Dinámico

18/06/2006 - 20:10 por Merichel | Informe spam
Hola a todos !

Estoy intentando hacer esta consulta en sql dinámico dentro de un
procedimiento. Quiero obtener el valor máximo de un campo (orden) de
una tabla y luego utilizar ese valor en el procedimiento. Al ejecutar
el procedimiento me da el siguiente error: "variable @ordenOUT must be
declared". Yo creo que ya está declarada en el execute sp_executesql.
Aún así he probado a declararla también arriba y sigue dando el
mismo error. Lo más curioso es que me imprime el valor de @orden
correctamente, pero me da el error y no me ejecuta el resto del
procedimiento. ¿Alquién sabe qué estoy haciendo mal?

declare @orden varchar(10)
set @strGetOrden=N'select @ordenOUT=max(orden) from '+ @tabla
execute sp_executesql @strGetOrden,N'@ordenOUT nvarchar(10)
output',@ordenOUT=@orden output

print @orden

if @orden is null
set @orden=1
else
set @orden=@orden + 1


Gracias de antemano.

Un saludo.
 

Leer las respuestas

#1 Alejandro Mesa
19/06/2006 - 14:03 | Informe spam
Merichel,

Cual es el tipo de dato de la columna [orden]?

Si estas sumandole 1 al valor de salida, entonces me have pensar que ese
valor es entero. Pudieras probar declarando las variables @orden y @ordenOUT
como int?

Ejemplo:

use northwind
go

declare @orden int
declare @tabla sysname
declare @strGetOrden nvarchar(4000)

set @tabla = N'[dbo].[orders]'
set @strGetOrden=N'select @ordenOUT=max(orderid) from '+ @tabla

execute sp_executesql @strGetOrden,N'@ordenOUT int output', @ordenOUT =
@orden output

print @orden

if @orden is null
set @orden=1
else
set @orden = @orden + 1
go


AMB


"Merichel" wrote:

Hola a todos !

Estoy intentando hacer esta consulta en sql dinámico dentro de un
procedimiento. Quiero obtener el valor máximo de un campo (orden) de
una tabla y luego utilizar ese valor en el procedimiento. Al ejecutar
el procedimiento me da el siguiente error: "variable @ordenOUT must be
declared". Yo creo que ya está declarada en el execute sp_executesql.
Aún así he probado a declararla también arriba y sigue dando el
mismo error. Lo más curioso es que me imprime el valor de @orden
correctamente, pero me da el error y no me ejecuta el resto del
procedimiento. ¿Alquién sabe qué estoy haciendo mal?

declare @orden varchar(10)
set @strGetOrden=N'select @ordenOUT=max(orden) from '+ @tabla
execute sp_executesql @strGetOrden,N'@ordenOUT nvarchar(10)
output',@ordenOUT=@orden output

print @orden

if @orden is null
set @orden=1
else
set @orden=@orden + 1


Gracias de antemano.

Un saludo.


Preguntas similares