Pasar columna como argumento de función

13/01/2007 - 12:02 por Salvador | Informe spam
Me podría decir alguien como pasar una columna como argumento de una función
en SQL Server 2000, como por ejemplo para ordenar una tabla devulelta por esa
función por esa columna:

CREATE FUNCTION dbo.[Agr](@Orden nvarchar)
RETURNS @Act TABLE (
[Id] [int] IDENTITY (1, 1) NOT NULL ,
[IdAct] [int] NULL ,
[TASK_ACT_OVT_WORK_PROT] [decimal](25, 6) NULL
)
AS
BEGIN

..
..


select * from @Act order by @Orden

END



Se trata de devolver la table @Act ordenada por la Columna @Orden


Gracias por anticipado.

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
13/01/2007 - 18:25 | Informe spam
How do I use a variable in an ORDER BY clause?
http://databases.aspfaq.com/databas...lause.html

La clave de todo esta en la expresion "case" que se usa en la clausula
"order by". Hay que tener en cuenta que el tipo de data que devuelve la
expresion "case" es el tipo de data de mayor precedencia que exista en las
expresiones usadas en todos los caminos "then ... else ...".


AMB


"Salvador" wrote:

Me podría decir alguien como pasar una columna como argumento de una función
en SQL Server 2000, como por ejemplo para ordenar una tabla devulelta por esa
función por esa columna:

CREATE FUNCTION dbo.[Agr](@Orden nvarchar)
RETURNS @Act TABLE (
[Id] [int] IDENTITY (1, 1) NOT NULL ,
[IdAct] [int] NULL ,
[TASK_ACT_OVT_WORK_PROT] [decimal](25, 6) NULL
)
AS
BEGIN

..
..


select * from @Act order by @Orden

END



Se trata de devolver la table @Act ordenada por la Columna @Orden


Gracias por anticipado.

Respuesta Responder a este mensaje
#2 Salvador
13/01/2007 - 21:56 | Informe spam
Lo he probado pero el método execute no funciona en una función definida por
el usuario.

Salvador.

"Alejandro Mesa" wrote:

How do I use a variable in an ORDER BY clause?
http://databases.aspfaq.com/databas...lause.html

La clave de todo esta en la expresion "case" que se usa en la clausula
"order by". Hay que tener en cuenta que el tipo de data que devuelve la
expresion "case" es el tipo de data de mayor precedencia que exista en las
expresiones usadas en todos los caminos "then ... else ...".


AMB


"Salvador" wrote:

> Me podría decir alguien como pasar una columna como argumento de una función
> en SQL Server 2000, como por ejemplo para ordenar una tabla devulelta por esa
> función por esa columna:
>
> CREATE FUNCTION dbo.[Agr](@Orden nvarchar)
> RETURNS @Act TABLE (
> [Id] [int] IDENTITY (1, 1) NOT NULL ,
> [IdAct] [int] NULL ,
> [TASK_ACT_OVT_WORK_PROT] [decimal](25, 6) NULL
> )
> AS
> BEGIN
>
> ..
> ..
>
>
> select * from @Act order by @Orden
>
> END
>
>
>
> Se trata de devolver la table @Act ordenada por la Columna @Orden
>
>
> Gracias por anticipado.
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
13/01/2007 - 23:31 | Informe spam
Salvador,

1 - No me referi a usar la sentencia EXEC(...)
2 - Aca te paso un ejemplo
3 - No tiene sentido alguno hacerlo dentro de una funcion defenida por el
usuario porque de todas maneras debes especificar la clausula "order by"
cuando referencies a la funcion, ya que de la unica manera que sql server
garantiza que el resultado este ordenado es usando la clausula "order by" en
la sentencia select que genera los resultados.

select c1, ..., cn
from dbo.tu_funcion
order by ...

Ejemplo:


use northwind
go

create procedure dbo.usp_p1 (
@orderby as int = null
)
as

set nocount on

select top 10 orderid, orderdate, requiredDate, customerid, shipname
from dbo.orders
order by
case @orderby
when 1 then cast(orderid as varchar(10))
when 2 then customerid
when 3 then shipname
else convert(varchar(25), orderdate, 126)
end asc

return @@error
go

exec dbo.usp_p1 1
exec dbo.usp_p1 2
exec dbo.usp_p1 3
exec dbo.usp_p1
go

drop procedure dbo.usp_p1
go


AMB

"Salvador" wrote:

Lo he probado pero el método execute no funciona en una función definida por
el usuario.

Salvador.

"Alejandro Mesa" wrote:

> How do I use a variable in an ORDER BY clause?
> http://databases.aspfaq.com/databas...lause.html
>
> La clave de todo esta en la expresion "case" que se usa en la clausula
> "order by". Hay que tener en cuenta que el tipo de data que devuelve la
> expresion "case" es el tipo de data de mayor precedencia que exista en las
> expresiones usadas en todos los caminos "then ... else ...".
>
>
> AMB
>
>
> "Salvador" wrote:
>
> > Me podría decir alguien como pasar una columna como argumento de una función
> > en SQL Server 2000, como por ejemplo para ordenar una tabla devulelta por esa
> > función por esa columna:
> >
> > CREATE FUNCTION dbo.[Agr](@Orden nvarchar)
> > RETURNS @Act TABLE (
> > [Id] [int] IDENTITY (1, 1) NOT NULL ,
> > [IdAct] [int] NULL ,
> > [TASK_ACT_OVT_WORK_PROT] [decimal](25, 6) NULL
> > )
> > AS
> > BEGIN
> >
> > ..
> > ..
> >
> >
> > select * from @Act order by @Orden
> >
> > END
> >
> >
> >
> > Se trata de devolver la table @Act ordenada por la Columna @Orden
> >
> >
> > Gracias por anticipado.
> >
Respuesta Responder a este mensaje
#4 Salvador
14/01/2007 - 01:08 | Informe spam
Se lo que queires decir, pero la clusula order by no la necesito para ordenar
la tabla que devuelve la función. Te comento un poco lo que hace.
Se trata de una función que devuelve una tabla con una serie de registros
que provienen del tratamiento de otras tres tablas, necesito la clausula
order by, no para ordenar la tabla que devuelve la funcion, si no para
ordenar las tablas que van a conformar la tabla devuelta, y que dependiendo
de los parámetros que pase la función los colocará de una manera u otra.

Gracias anticipadas por tus respuestas.
Salvador.

"Alejandro Mesa" wrote:

Salvador,

1 - No me referi a usar la sentencia EXEC(...)
2 - Aca te paso un ejemplo
3 - No tiene sentido alguno hacerlo dentro de una funcion defenida por el
usuario porque de todas maneras debes especificar la clausula "order by"
cuando referencies a la funcion, ya que de la unica manera que sql server
garantiza que el resultado este ordenado es usando la clausula "order by" en
la sentencia select que genera los resultados.

select c1, ..., cn
from dbo.tu_funcion
order by ...

Ejemplo:


use northwind
go

create procedure dbo.usp_p1 (
@orderby as int = null
)
as

set nocount on

select top 10 orderid, orderdate, requiredDate, customerid, shipname
from dbo.orders
order by
case @orderby
when 1 then cast(orderid as varchar(10))
when 2 then customerid
when 3 then shipname
else convert(varchar(25), orderdate, 126)
end asc

return @@error
go

exec dbo.usp_p1 1
exec dbo.usp_p1 2
exec dbo.usp_p1 3
exec dbo.usp_p1
go

drop procedure dbo.usp_p1
go


AMB

"Salvador" wrote:

> Lo he probado pero el método execute no funciona en una función definida por
> el usuario.
>
> Salvador.
>
> "Alejandro Mesa" wrote:
>
> > How do I use a variable in an ORDER BY clause?
> > http://databases.aspfaq.com/databas...lause.html
> >
> > La clave de todo esta en la expresion "case" que se usa en la clausula
> > "order by". Hay que tener en cuenta que el tipo de data que devuelve la
> > expresion "case" es el tipo de data de mayor precedencia que exista en las
> > expresiones usadas en todos los caminos "then ... else ...".
> >
> >
> > AMB
> >
> >
> > "Salvador" wrote:
> >
> > > Me podría decir alguien como pasar una columna como argumento de una función
> > > en SQL Server 2000, como por ejemplo para ordenar una tabla devulelta por esa
> > > función por esa columna:
> > >
> > > CREATE FUNCTION dbo.[Agr](@Orden nvarchar)
> > > RETURNS @Act TABLE (
> > > [Id] [int] IDENTITY (1, 1) NOT NULL ,
> > > [IdAct] [int] NULL ,
> > > [TASK_ACT_OVT_WORK_PROT] [decimal](25, 6) NULL
> > > )
> > > AS
> > > BEGIN
> > >
> > > ..
> > > ..
> > >
> > >
> > > select * from @Act order by @Orden
> > >
> > > END
> > >
> > >
> > >
> > > Se trata de devolver la table @Act ordenada por la Columna @Orden
> > >
> > >
> > > Gracias por anticipado.
> > >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida