PARA MAXI- UNO DE PROCEDIMIENTOS

11/05/2005 - 18:57 por Henrys | Informe spam
De lo que leido en otros post y en el cual tambien me han ayudado a no seguir
utilizando SQL DINAMICO, comenze a poner todo en procedimientos almanenados,
pero me han tocado solamente con 2 procedimiento en lo cual no ha funcionado
esta técnica (UTIZANDO ISNULL(@campo1,campo)) que podra ser? o alguna idea?,
ya lo he intentado con
OR pero ni asi, se me repiten los resultados (NOTA: SOLO ESTE PROBLEMA HA
SIDO CON 2 PROCEDIMIENTOS)

Este es uno de ellos.

CREATE PROCEDURE pBuscarCIES9
(
@CVE_PROCEDIMIENTO varchar(6)=NULL,
@PROCEDIMIENTO varchar(100)=NULL,
@CVE_CLASIFICACION int=NULL
)
AS
set nocount on

SELECT
CAT_PROCEDIMIENTOS.*, CAT_CLASIFICACION_CIE.CLASIFICACION
FROM CAT_PROCEDIMIENTOS INNER JOIN CAT_CLASIFICACION_CIE
ON
CAT_PROCEDIMIENTOS.CVE_CLASIFICACIONÊT_CLASIFICACION_CIE.CVE_CLASIFICACION
WHERE CVE_PROCEDIMIENTO=ISNULL(@CVE_PROCEDIMIENTO,CVE_PROCEDIMIENTO)
AND PROCEDIMIENTO=ISNULL(@PROCEDIMIENTO,PROCEDIMIENTO)
AND
CAT_PROCEDIMIENTOS.CVE_CLASIFICACION=ISNULL(@CVE_CLASIFICACION,CAT_PROCEDIMIENTOS.CVE_CLASIFICACION)
GO

SALUDOS Y ESPERANDO RESPUESTAS DE ANTEMANO..

Preguntas similare

Leer las respuestas

#1 Maxi
11/05/2005 - 19:19 | Informe spam
Hola, repote los resultados? eso no se si es por el uso del isnull, me
inclino mas por la union que estas haciendo. Verifica si lo estas haciendo
de forma correcta el inner




Salu2
Maxi


"Henrys" escribió en el mensaje
news:
De lo que leido en otros post y en el cual tambien me han ayudado a no
seguir
utilizando SQL DINAMICO, comenze a poner todo en procedimientos
almanenados,
pero me han tocado solamente con 2 procedimiento en lo cual no ha
funcionado
esta técnica (UTIZANDO ISNULL(@campo1,campo)) que podra ser? o alguna
idea?,
ya lo he intentado con
OR pero ni asi, se me repiten los resultados (NOTA: SOLO ESTE PROBLEMA HA
SIDO CON 2 PROCEDIMIENTOS)

Este es uno de ellos.

CREATE PROCEDURE pBuscarCIES9
(
@CVE_PROCEDIMIENTO varchar(6)=NULL,
@PROCEDIMIENTO varchar(100)=NULL,
@CVE_CLASIFICACION int=NULL
)
AS
set nocount on

SELECT
CAT_PROCEDIMIENTOS.*, CAT_CLASIFICACION_CIE.CLASIFICACION
FROM CAT_PROCEDIMIENTOS INNER JOIN CAT_CLASIFICACION_CIE
ON
CAT_PROCEDIMIENTOS.CVE_CLASIFICACIONÊT_CLASIFICACION_CIE.CVE_CLASIFICACION
WHERE CVE_PROCEDIMIENTO=ISNULL(@CVE_PROCEDIMIENTO,CVE_PROCEDIMIENTO)
AND PROCEDIMIENTO=ISNULL(@PROCEDIMIENTO,PROCEDIMIENTO)
AND
CAT_PROCEDIMIENTOS.CVE_CLASIFICACION=ISNULL(@CVE_CLASIFICACION,CAT_PROCEDIMIENTOS.CVE_CLASIFICACION)
GO

SALUDOS Y ESPERANDO RESPUESTAS DE ANTEMANO..
Respuesta Responder a este mensaje
#2 Pablo Rodríguez Riveros
11/05/2005 - 19:26 | Informe spam
Estás ocupando de mala manera el ISNULL, ya que si bien esta sentencia
recibe 2 parametros, su objetivo es "reemplazar NULL con el valor de
reemplazo especificado", no sirve para utilizarla dentro de un where.

Para eso pregunta por <campo> IS [NOT] NULL

"Henrys" escribió en el mensaje
news:
De lo que leido en otros post y en el cual tambien me han ayudado a no
seguir
utilizando SQL DINAMICO, comenze a poner todo en procedimientos
almanenados,
pero me han tocado solamente con 2 procedimiento en lo cual no ha
funcionado
esta técnica (UTIZANDO ISNULL(@campo1,campo)) que podra ser? o alguna
idea?,
ya lo he intentado con
OR pero ni asi, se me repiten los resultados (NOTA: SOLO ESTE PROBLEMA HA
SIDO CON 2 PROCEDIMIENTOS)

Este es uno de ellos.

CREATE PROCEDURE pBuscarCIES9
(
@CVE_PROCEDIMIENTO varchar(6)=NULL,
@PROCEDIMIENTO varchar(100)=NULL,
@CVE_CLASIFICACION int=NULL
)
AS
set nocount on

SELECT
CAT_PROCEDIMIENTOS.*, CAT_CLASIFICACION_CIE.CLASIFICACION
FROM CAT_PROCEDIMIENTOS INNER JOIN CAT_CLASIFICACION_CIE
ON
CAT_PROCEDIMIENTOS.CVE_CLASIFICACIONÊT_CLASIFICACION_CIE.CVE_CLASIFICACION
WHERE CVE_PROCEDIMIENTO=ISNULL(@CVE_PROCEDIMIENTO,CVE_PROCEDIMIENTO)
AND PROCEDIMIENTO=ISNULL(@PROCEDIMIENTO,PROCEDIMIENTO)
AND
CAT_PROCEDIMIENTOS.CVE_CLASIFICACION=ISNULL(@CVE_CLASIFICACION,CAT_PROCEDIMIENTOS.CVE_CLASIFICACION)
GO

SALUDOS Y ESPERANDO RESPUESTAS DE ANTEMANO..
Respuesta Responder a este mensaje
#3 Henrys
11/05/2005 - 19:36 | Informe spam
Ok,
Maestro Maxi:
si hago esto (AND):
AND campo1=ISNULL(@Campo1,campo1)
AND campo2=ISNULL(@Campo2,campo2)
"NO DEVUELVE NINGUN VALOR", aunque yo le ponga uno u otro (valor) no me
devuelve nada
tambien he intendo
AND RTRIM(campo1)=ISNULL(@Campo1,RTRIM(campo1))
AND RTRIM(campo2)=ISNULL(@Campo2,RTRIM(campo2))

Y si uso el (OR)
OR campo1=ISNULL(@Campo1,campo1)
OR campo2=ISNULL(@Campo2,campo2)
Me duplica resultados, NO en duplicarse la inf.

EL Join Es correcto, si lo hago solo...
Ahora como tu me dices, como hacerlo en UNION?
GRACIAS POR TU AYUDA E INTERES

SALUDOS DESDE TABASCO,MEXICO

"Maxi" escribió:

Hola, repote los resultados? eso no se si es por el uso del isnull, me
inclino mas por la union que estas haciendo. Verifica si lo estas haciendo
de forma correcta el inner




Salu2
Maxi


"Henrys" escribió en el mensaje
news:
> De lo que leido en otros post y en el cual tambien me han ayudado a no
> seguir
> utilizando SQL DINAMICO, comenze a poner todo en procedimientos
> almanenados,
> pero me han tocado solamente con 2 procedimiento en lo cual no ha
> funcionado
> esta técnica (UTIZANDO ISNULL(@campo1,campo)) que podra ser? o alguna
> idea?,
> ya lo he intentado con
> OR pero ni asi, se me repiten los resultados (NOTA: SOLO ESTE PROBLEMA HA
> SIDO CON 2 PROCEDIMIENTOS)
>
> Este es uno de ellos.
>
> CREATE PROCEDURE pBuscarCIES9
> (
> @CVE_PROCEDIMIENTO varchar(6)=NULL,
> @PROCEDIMIENTO varchar(100)=NULL,
> @CVE_CLASIFICACION int=NULL
> )
> AS
> set nocount on
>
> SELECT
> CAT_PROCEDIMIENTOS.*, CAT_CLASIFICACION_CIE.CLASIFICACION
> FROM CAT_PROCEDIMIENTOS INNER JOIN CAT_CLASIFICACION_CIE
> ON
> CAT_PROCEDIMIENTOS.CVE_CLASIFICACIONÊT_CLASIFICACION_CIE.CVE_CLASIFICACION
> WHERE CVE_PROCEDIMIENTO=ISNULL(@CVE_PROCEDIMIENTO,CVE_PROCEDIMIENTO)
> AND PROCEDIMIENTO=ISNULL(@PROCEDIMIENTO,PROCEDIMIENTO)
> AND
> CAT_PROCEDIMIENTOS.CVE_CLASIFICACION=ISNULL(@CVE_CLASIFICACION,CAT_PROCEDIMIENTOS.CVE_CLASIFICACION)
> GO
>
> SALUDOS Y ESPERANDO RESPUESTAS DE ANTEMANO..



Respuesta Responder a este mensaje
#4 Henrys
11/05/2005 - 19:40 | Informe spam
HOLA PABLO GRACIAS POR TU INTERES
ME PODRIAS DAR UN EJEMPLO MAS ESPECIFICO
DE LO QUE ME DICES " <campo> IS [NOT] NULL"

SALUDOS DESDE TABASCO, MEXICO..

"Pablo Rodríguez Riveros" escribió:

Estás ocupando de mala manera el ISNULL, ya que si bien esta sentencia
recibe 2 parametros, su objetivo es "reemplazar NULL con el valor de
reemplazo especificado", no sirve para utilizarla dentro de un where.

Para eso pregunta por <campo> IS [NOT] NULL

"Henrys" escribió en el mensaje
news:
> De lo que leido en otros post y en el cual tambien me han ayudado a no
> seguir
> utilizando SQL DINAMICO, comenze a poner todo en procedimientos
> almanenados,
> pero me han tocado solamente con 2 procedimiento en lo cual no ha
> funcionado
> esta técnica (UTIZANDO ISNULL(@campo1,campo)) que podra ser? o alguna
> idea?,
> ya lo he intentado con
> OR pero ni asi, se me repiten los resultados (NOTA: SOLO ESTE PROBLEMA HA
> SIDO CON 2 PROCEDIMIENTOS)
>
> Este es uno de ellos.
>
> CREATE PROCEDURE pBuscarCIES9
> (
> @CVE_PROCEDIMIENTO varchar(6)=NULL,
> @PROCEDIMIENTO varchar(100)=NULL,
> @CVE_CLASIFICACION int=NULL
> )
> AS
> set nocount on
>
> SELECT
> CAT_PROCEDIMIENTOS.*, CAT_CLASIFICACION_CIE.CLASIFICACION
> FROM CAT_PROCEDIMIENTOS INNER JOIN CAT_CLASIFICACION_CIE
> ON
> CAT_PROCEDIMIENTOS.CVE_CLASIFICACIONÊT_CLASIFICACION_CIE.CVE_CLASIFICACION
> WHERE CVE_PROCEDIMIENTO=ISNULL(@CVE_PROCEDIMIENTO,CVE_PROCEDIMIENTO)
> AND PROCEDIMIENTO=ISNULL(@PROCEDIMIENTO,PROCEDIMIENTO)
> AND
> CAT_PROCEDIMIENTOS.CVE_CLASIFICACION=ISNULL(@CVE_CLASIFICACION,CAT_PROCEDIMIENTOS.CVE_CLASIFICACION)
> GO
>
> SALUDOS Y ESPERANDO RESPUESTAS DE ANTEMANO..



Respuesta Responder a este mensaje
#5 Morena
11/05/2005 - 19:50 | Informe spam
Esto es lo que esta en los BOL:

NULL Comparison Search Conditions
The value NULL means the data value for the column is unknown or not
available. NULL is not synonymous with zero (numeric or binary value), a
zero-length string, or blank (character value). Rather, null values allow
you to distinguish between an entry of zero (numeric columns) or blank
(character columns) and a nonentry (NULL for both numeric and character
columns).

NULL can be entered in a column for which null values are permitted (as
specified in the CREATE TABLE statement) in two ways:

a.. Microsoft® SQL ServerT 2000 automatically enters the value NULL if no
data is entered and there is no default or DEFAULT constraint on the column
or data type.


b.. The user can explicitly enter the value NULL by typing NULL without
quotation marks. If the word NULL is typed into a character column with
quotation marks, it is treated as the letters N, U, L, and L, not as a null
value.
When null values are retrieved, an application typically displays a string
such as NULL, or (NULL), or (null) in the appropriate position. For example,
the advance column of the titles table allows null values:

SELECT title_id, type, advance
FROM pubs.dbo.titles
WHERE advance IS NULL
Here is the result set:

title_id type advance
MC3026 UNDECIDED (null)
PC9999 popular_comp (null)

(2 row(s) affected)
Comparing Null Values
Care must be taken when comparing null values. The behavior of the
comparison depends on the setting of the SET ANSI_NULLS option.

When SET ANSI_NULLS is ON, a comparison in which one or more of the
expressions is NULL does not yield either TRUE or FALSE; it yields UNKNOWN.
This is because a value that is unknown cannot be compared logically against
any other value. This occurs if either an expression is compared to the
literal NULL, or if two expressions are compared and one of them evaluates
to NULL. For example, this comparison always yields UNKNOWN when ANSI_NULLS
is ON:

ytd_sales > NULL
This comparison also yields UNKNOWN any time the variable contains the value
NULL:

ytd_sales > @MyVariable
Use the IS NULL or IS NOT NULL clauses to test for a NULL value. This can
add complexity to the WHERE clause. For example, the Region column in the
Northwind Customers table allows null values. If a SELECT statement is to
test for null values in addition to others, it must include an IS NULL
clause:

SELECT CustomerID, CompanyName, Region
FROM Northwind.dbo.Customers
WHERE Region IN ('WA', 'SP', 'BC')
OR Region IS NULL
Transact-SQL supports an extension that allows for the comparison operators
to return TRUE or FALSE when comparing against null values. This option is
activated by setting ANSI_NULLS OFF. When ANSI_NULLS is OFF, comparisons
such as ColumnA = NULL return TRUE when ColumnA contains a null value and
FALSE when ColumnA contains some value besides NULL. Also, a comparison of
two expressions that have both evaluated to null values yields TRUE. With
ANSI_NULLS set OFF, this SELECT statement returns all the rows in the
Customer table for which Region is a null value:

SELECT CustomerID, CompanyName, Region
FROM Northwind.dbo.Customers
WHERE Region = NULL
Regardless of the ANSI_NULLS setting, Null values are always considered
equal for the purposes of the ORDER BY, GROUP BY, and DISTINCT keywords.
Also, a unique index or UNIQUE constraint that allows NULL can contain only
one row with a NULL key value. A subsequent row with NULL is rejected. A
primary key cannot have NULL in any column that is part of the key.

Computations involving NULL evaluate to NULL because the result must be
UNKNOWN if any of the factors is unknown. For example, column1 + 1 evaluates
to NULL if column1 is NULL.

When the columns being searched include those defined as allowing null
values, you can find null or nonnull values in the database with this
pattern:

WHERE column_name IS [NOT] NULL


Morena González
Informática Regional - Desarrollo
Sherwin Williams de Centroamérica S.A. de C.V.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida