Ayuda con una vista. Muy urgente. Gracias

13/06/2005 - 17:40 por Nacho | Informe spam
Tengo una vista con el siguiente codigo en SQL:

SELECT dbo.PEDIDOS.*, [FECHA DE PEDIDO] AS Expr3, [Operacion abierta] AS
Expr4, COMERCIAL AS Expr5
FROM dbo.PEDIDOS
WHERE ([Operacion abierta] = 1) AND (COMERCIAL = @Comercial)
ORDER BY [FECHA DE PEDIDO]

El problema es que la vista me saca todas las "operaciones abiertas" de un
comercial ordenadas por la fecha del pedido.
Mi pregunta es: como puedo hacer para que al ejecutar la consulta, cuando se
me abre el recuadro y me pregunta comercial, SI NO PONGO NADA Y LE DOY AL
ENTER, me saque todos los registros de todos los comerciales?
Gracias de verdad. No tengo mucha idea de SQL y en Access 2003 si sabia como
hacerlo, pero aqui no tengo ni idea.

Muchas gracias

Nacho Lopez

Preguntas similare

Leer las respuestas

#1 Maxi
13/06/2005 - 17:50 | Informe spam
Hola, primero deberias armar un procedimiento almacenado y la idea seria
algo asi como:


CREATE PROC USP_NOMBRE @COMERCIAL VARCHAR(20) AS
SELECT dbo.PEDIDOS.*, [FECHA DE PEDIDO] AS Expr3, [Operacion abierta]
AS
Expr4, COMERCIAL AS Expr5
FROM dbo.PEDIDOS
WHERE ([Operacion abierta] = 1) AND (COMERCIAL =
ISNULL(@Comercial,comercial))
ORDER BY [FECHA DE PEDIDO]



Salu2
Maxi


"Nacho" escribió en el mensaje
news:
Tengo una vista con el siguiente codigo en SQL:

SELECT dbo.PEDIDOS.*, [FECHA DE PEDIDO] AS Expr3, [Operacion abierta]
AS Expr4, COMERCIAL AS Expr5
FROM dbo.PEDIDOS
WHERE ([Operacion abierta] = 1) AND (COMERCIAL = @Comercial)
ORDER BY [FECHA DE PEDIDO]

El problema es que la vista me saca todas las "operaciones abiertas" de un
comercial ordenadas por la fecha del pedido.
Mi pregunta es: como puedo hacer para que al ejecutar la consulta, cuando
se me abre el recuadro y me pregunta comercial, SI NO PONGO NADA Y LE DOY
AL ENTER, me saque todos los registros de todos los comerciales?
Gracias de verdad. No tengo mucha idea de SQL y en Access 2003 si sabia
como hacerlo, pero aqui no tengo ni idea.

Muchas gracias

Nacho Lopez

Respuesta Responder a este mensaje
#2 Nacho
13/06/2005 - 17:56 | Informe spam
Voy a probarlo Maxi. Si me funciona me haces feliz. Muchas gracias.


Muchas gracias

Nacho Lopez

"Maxi" escribió en el mensaje
news:%
Hola, primero deberias armar un procedimiento almacenado y la idea seria
algo asi como:


CREATE PROC USP_NOMBRE @COMERCIAL VARCHAR(20) AS
SELECT dbo.PEDIDOS.*, [FECHA DE PEDIDO] AS Expr3, [Operacion abierta]
AS
Expr4, COMERCIAL AS Expr5
FROM dbo.PEDIDOS
WHERE ([Operacion abierta] = 1) AND (COMERCIAL =
ISNULL(@Comercial,comercial))
ORDER BY [FECHA DE PEDIDO]



Salu2
Maxi


"Nacho" escribió en el mensaje
news:
Tengo una vista con el siguiente codigo en SQL:

SELECT dbo.PEDIDOS.*, [FECHA DE PEDIDO] AS Expr3, [Operacion abierta]
AS Expr4, COMERCIAL AS Expr5
FROM dbo.PEDIDOS
WHERE ([Operacion abierta] = 1) AND (COMERCIAL = @Comercial)
ORDER BY [FECHA DE PEDIDO]

El problema es que la vista me saca todas las "operaciones abiertas" de
un comercial ordenadas por la fecha del pedido.
Mi pregunta es: como puedo hacer para que al ejecutar la consulta, cuando
se me abre el recuadro y me pregunta comercial, SI NO PONGO NADA Y LE DOY
AL ENTER, me saque todos los registros de todos los comerciales?
Gracias de verdad. No tengo mucha idea de SQL y en Access 2003 si sabia
como hacerlo, pero aqui no tengo ni idea.

Muchas gracias

Nacho Lopez





Respuesta Responder a este mensaje
#3 Alejandro Mesa
13/06/2005 - 18:17 | Informe spam
Nacho,

Que raro, sql server no permite tener vistas con parametros, querras decir
que tienes una sentencia select en una funcion o procedimiento almacenado.
Para darte una respuesta correcta, deberiamos saber el tipo de dato de la
columna [comercial] y si tienes o no un indice por esa columna. La solucion
de Maxi, aunque muy logica, no es optima porque sql server no considera la
expresion "columna = isnull(@variable, columna)" como un argumento de
busqueda y por lo cual no hara un uso optimo de los indices en caso de que
estos existan. Veamos un ejemplo:

use northwind
go

exec sp_helpindex orders
go

set showplan_text on
go

declare @customerid nchar(5)

select
customerid,
orderid,
orderdate
from
dbo.orders
where
customerid = isnull(@customerid, customerid)

select
customerid,
orderid,
orderdate
from
dbo.orders
where
customerid like coalesce(@customerid, '%')
go

set showplan_text off
go

Si te fijas en el plan de ejecucion de la primera sentencia, veras que sql
hara un scan del indice clustered, mientras que en la segunda hara un seek en
el indice "CustomerID".

Si no tienes un indice por esa columna, pues entonce no tiene sentido tratar
de optimizar la sentencia. Si el tipo de data de la columna [comercial] es
diferente de nchar / nvarchar / char / varchar, existen otros metodos para
optimizar la busqueda.


AMB

"Nacho" wrote:

Tengo una vista con el siguiente codigo en SQL:

SELECT dbo.PEDIDOS.*, [FECHA DE PEDIDO] AS Expr3, [Operacion abierta] AS
Expr4, COMERCIAL AS Expr5
FROM dbo.PEDIDOS
WHERE ([Operacion abierta] = 1) AND (COMERCIAL = @Comercial)
ORDER BY [FECHA DE PEDIDO]

El problema es que la vista me saca todas las "operaciones abiertas" de un
comercial ordenadas por la fecha del pedido.
Mi pregunta es: como puedo hacer para que al ejecutar la consulta, cuando se
me abre el recuadro y me pregunta comercial, SI NO PONGO NADA Y LE DOY AL
ENTER, me saque todos los registros de todos los comerciales?
Gracias de verdad. No tengo mucha idea de SQL y en Access 2003 si sabia como
hacerlo, pero aqui no tengo ni idea.

Muchas gracias

Nacho Lopez



Respuesta Responder a este mensaje
#4 Maxi
13/06/2005 - 19:12 | Informe spam
Hola, tienes toda la razon, es mejor hacerlo con el Like y coalesce :-)


Salu2
Maxi


"Alejandro Mesa" escribió en el
mensaje news:
Nacho,

Que raro, sql server no permite tener vistas con parametros, querras decir
que tienes una sentencia select en una funcion o procedimiento almacenado.
Para darte una respuesta correcta, deberiamos saber el tipo de dato de la
columna [comercial] y si tienes o no un indice por esa columna. La
solucion
de Maxi, aunque muy logica, no es optima porque sql server no considera la
expresion "columna = isnull(@variable, columna)" como un argumento de
busqueda y por lo cual no hara un uso optimo de los indices en caso de que
estos existan. Veamos un ejemplo:

use northwind
go

exec sp_helpindex orders
go

set showplan_text on
go

declare @customerid nchar(5)

select
customerid,
orderid,
orderdate
from
dbo.orders
where
customerid = isnull(@customerid, customerid)

select
customerid,
orderid,
orderdate
from
dbo.orders
where
customerid like coalesce(@customerid, '%')
go

set showplan_text off
go

Si te fijas en el plan de ejecucion de la primera sentencia, veras que sql
hara un scan del indice clustered, mientras que en la segunda hara un seek
en
el indice "CustomerID".

Si no tienes un indice por esa columna, pues entonce no tiene sentido
tratar
de optimizar la sentencia. Si el tipo de data de la columna [comercial] es
diferente de nchar / nvarchar / char / varchar, existen otros metodos para
optimizar la busqueda.


AMB

"Nacho" wrote:

Tengo una vista con el siguiente codigo en SQL:

SELECT dbo.PEDIDOS.*, [FECHA DE PEDIDO] AS Expr3, [Operacion abierta]
AS
Expr4, COMERCIAL AS Expr5
FROM dbo.PEDIDOS
WHERE ([Operacion abierta] = 1) AND (COMERCIAL = @Comercial)
ORDER BY [FECHA DE PEDIDO]

El problema es que la vista me saca todas las "operaciones abiertas" de
un
comercial ordenadas por la fecha del pedido.
Mi pregunta es: como puedo hacer para que al ejecutar la consulta, cuando
se
me abre el recuadro y me pregunta comercial, SI NO PONGO NADA Y LE DOY AL
ENTER, me saque todos los registros de todos los comerciales?
Gracias de verdad. No tengo mucha idea de SQL y en Access 2003 si sabia
como
hacerlo, pero aqui no tengo ni idea.

Muchas gracias

Nacho Lopez



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