Como mostrar registros con un parámetro

Tengo una duda como puedo yo mostrar registros
en una
Consulta pasandole un parametro donde le diga la cantidad de
registros
Que deseo mostrar, sin utilizar la sentencia "top"
Porq es una procedimiento almacenado,
Gracias por tu tiempo
Script:
--Mostrar cod_docente, nombre, categoria, cursos
Create
procedure usp_buscar_docente
@nom_docvarchar(30),
@nom_categoriavarchar(30),
@cod_cursovarchar(10)
as
select
d.cod_doc,dh.cod_doc,d.nom_doc,c.nom_categoria,cu.nom_curso
from
docente d inner join categoria c
on d.cod_categoria=c.cod_categoria
full outer join docente_hi dh
on d.cod_doc=dh.cod_doc
inner join curso cu
on
cu.cod_curso=cu.cod_curso
end;
where
d.cod_doc=@nom_doc
and d.cod_categoria like '%'+
@nom_categoria+ '%'

1 respuesta

Respuesta
1
En caso que estés usando SQL Server 2005 puedes hacer lo siguiente:
Agregar una columna del tipo identidad al inicio de tu qry con lo siguiente:
select row number() over(order by columna1, columna2...) Alias,...
luego de eso hacer lo sgte:
select *
from (
select anterior usando el campo identidad llamado alias
)a
where alias<= @cantidadregistros
En caso que uses SQL 2000, deberías declarar una variable tabla y declarar una variable identidad, la figura es la misma.
Estoy utilizando sql-2000
Te doy un ejemplo y tu lo llevas a tu escenario:
Declare @data table(id int identity(1, 1), col1 int, col2 varchar(12))
insert into @data
select col1, col2
from tabla1 a inner join tabla2 b on a.colid= b.colid
where a.cod=@cod
select *
from @data
where id<= @cantidad
Gracias por la ayuda al final utilice un top, pero necesito que me apoyes experto, tengo un script en el cual tengo que mostrar los registros agrupados por agencia, por producto, y por moneda según la cantidad que yo ingrese esa sera la cantidad que debe de mostrar por agencia, producto, moneda por ejemplo si ingreso 10, deberá de mostrarme 10 registros por la agencia01, agencia06, agencia05, el script de abajo es lo que tengo, si te darás cuenta el cod_agencia lo he capturado en un array al igual que el producto pero si ejecuto la sentencia tal como esta solo me va a tomar la primera agencia y no las demás.
select top @variable, *
   from tabla 
where cod_agencia in ('01','06','05')
and cod_producto in ('02','04','06')
and cod_moneda like '%'
Gracias por tu tiempo.
Te envío un link de referencia con una pregunta similar que he contestado antes...
http://www.todoexpertos.com/mitodoexpertos/expert/questions/view/2032578/maximo-y-el-sgte-de-un-grupo-en-una-tabla-de-sql
Hola experto he utilizado otro datawindows en power builder es como
dataset, donde he almacenado los registros por agencia y por producto
en un array y esta excelente, pero tengo un problema ahora es que en el
código de moneda solo existe 1=nacional y 2=dolar al momento que le
paso el parámetro el cod_moneda = '%', entonces según este script:
select
top 20 cod_moneda,cod_producto,saldo, *  from tabla where agencia =
'01' and cod_producto = '01' and cod_moneda like '%' order by
cod_moneda,saldo desc
solo me muestra los soles y no los dolares porque primero los esta ordenando por cod_moneda y luego por saldo pero me sale 4
primeros el soles,5 siguientes en dolares etc, y como te daras cuenta
esta desordenado y quiero que los agrupe bien osea en un bloque los
soles y en otro los dolares pero cuando uso top primero busca los soles
y luego los dolaresy el parametro q le mando es '%'   creo que seria
mejor hacer primero que grabe en una tabal temporal solo soles y luego
que paso con los dolares pèro no se como hacerlo me puedes dar un
ejemplo de como seria gracias
Esta un poco enredado lo que pones pero te pasare un ejemplo de una tabla temporal, en este caso, una variable tabla:
Declare @data table(id int, texto varchar(10))
insert into @data
select id, text
from tabla where moneda in ('soles')
select   moneda, count(*)
from @data
group by moneda
Este ejemplo es por decir algo, la idea es que veas como se puede usar la variable tabla para insertarle datos y luego hacer operaciones sobre ella.
Hola experto tengo una duda ya que quiero hacer un insert into a una tabla de nombre registro que he creado anteriormente que contiene las columnas canal, agencia, departamento, cliente, ciudad en la que quiero ingresar una fila cada vez que se ejecute el procedimiento alamcenado ventas quiero que me corrigas si estopy equivocado porque no me sale bien la consulta ya que es toy metiendo código duro a mi consulta
Create procedure ventas
@cliente vacar(5)
@numero varchar(5)
As
Insert into registro values ("01","03","cono sur",@cliente, -------)
Select cliente, apellido, direccion, ciudad, dni
From cliente
Where cod_cliente = @cod_cliente
And numero = @numero
Como te darás cuenta inserto en la tabla registro el canal, agencia, departamento pero el cliente y la ciudad tengo que obtenerlos del procedimiento a ejecutarse el cliente lo puedo hallar con el parámetro a ingresar pero la ciudad es una columna del procedimiento a ejecutarse, ya que los registros que va a mostrar esta consulta son 7 filas con datos iguales como obtengo la ciudad con un distinct o como
Pues en ese caso puedes agregar la sgte linea antes de tu insert into registro
Declare @ciudad varchar(10)
select @ciudad= max(ciudad)
from cliente
where cod_cliente=@cod_cliente and numero=@numero
Insert into registro......(.....@cliente, @ciudad)
Y ahora si tienes el dato de ciudad, ¿por qué le pongo max()? Pues porsiacaso vaya a haber un dato diferente y así se garantiza que tu consulta no caiga, ya tu te puedes encargar de validarlo para que no pase eso, pero como te digo es un porsiacaso.
Espero te sirva, no te olvides de cerrar la pregunta y cuando tengas otra habré otro hilo que igual te responderé.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas