Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

error en SP

Estas en el tema de error en SP en el foro de SQL Server en Foros del Web. Hola q tal? estoy tratando de hacer un SP pero me esta marcando un error, aqui les dejo una copia del Sp para ver si ...
  #1 (permalink)  
Antiguo 07/03/2008, 10:57
Avatar de pedraxito  
Fecha de Ingreso: noviembre-2007
Ubicación: Reynosa, Tamaulipas, Mexico
Mensajes: 32
Antigüedad: 16 años, 6 meses
Puntos: 1
Exclamación error en SP

Hola q tal?

estoy tratando de hacer un SP pero me esta marcando un error, aqui les dejo una copia del Sp para ver si es posible que me ayuden a encontrar el error, espero sus respuestas, gracias!
Código:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE spBuscaPacientes
    -- Add the parameters for the stored procedure here
    @NOMBRE nchar(30),
    @MADRE nvarchar(30),
    @DIRECCION nvarchar(60),
    @TEL nvarchar(50)
AS
    DECLARE @criteria nvarchar(1000)
    DECLARE @statement nvarchar(2000)
    SET @criteria = 'WHERE 1=1 '
IF NOT @NOMBRE IS NULL
    SET @criteria = @criteria + 'AND Nombre LIKE @NOMBRE '
IF NOT @MADRE IS NULL
    SET @criteria = @criteria + 'AND Nombre_Madre LIKE @MADRE '
IF NOT @DIRECCION IS NULL
    SET @criteria = @criteria + 'AND Direccion LIKE @DIRECCION'
IF NOT @TEL IS NULL
    SET @criteria = @criteria + 'AND Telefono_1 LIKE @TEL'
BEGIN
    SELECT * FROM Pacientes @criteria
END
GO
  #2 (permalink)  
Antiguo 07/03/2008, 12:38
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Re: error en SP

Código:
CREATE PROCEDURE spBuscaPacientes
    -- Add the parameters for the stored procedure here
    @NOMBRE nchar(30),
    @MADRE nvarchar(30),
    @DIRECCION nvarchar(60),
    @TEL nvarchar(50)
AS
BEGIN
    DECLARE @criteria nvarchar(1000)
    DECLARE @statement nvarchar(2000)
    SET @criteria = 'WHERE 1=1 '
IF NOT @NOMBRE IS NULL
    SET @criteria = @criteria + 'AND Nombre LIKE @NOMBRE '
IF NOT @MADRE IS NULL
    SET @criteria = @criteria + 'AND Nombre_Madre LIKE @MADRE '
IF NOT @DIRECCION IS NULL
    SET @criteria = @criteria + 'AND Direccion LIKE @DIRECCION'
IF NOT @TEL IS NULL
    SET @criteria = @criteria + 'AND Telefono_1 LIKE @TEL'



execute ('SELECT * FROM Pacientes' + @criteria)

END
GO
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Última edición por Andres95; 07/03/2008 a las 13:32 Razón: Sintaxis
  #3 (permalink)  
Antiguo 07/03/2008, 16:57
Avatar de Thumper  
Fecha de Ingreso: agosto-2004
Ubicación: Jesús María - Lima - Perú
Mensajes: 270
Antigüedad: 19 años, 8 meses
Puntos: 6
Re: error en SP

No soy muy amante del SQL Dinámico o "Código Rojito" como lo llamamos mis patas y yo, asi que te dejo esta propuesta haber q te parece.

Cita:
SELECT *
FROM Pacientes
WHERE ( NOMBRE LIKE @NOMBRE OR @NOMBRE IS NULL) AND
( MADRE LIKE @MADRE OR @MADRE IS NULL) AND
( DIRECCION LIKE @DIRECCION OR @DIRECCION IS NULL) AND
( TEL LIKE @TEL OR @TEL IS NULL)
Por cierto esas claúsulas LIKE no estan cumpliendo su verdadera labor, en el código que presentas sería lo mismo poner "=".

Para buscar los que coincidan con el mismo nombre

Cita:
NOMBRE = @NOMBRE OR @NOMBRE IS NULL
ó

Aquellos nombres que tengan la palabra dentro.

Cita:
NOMBRE LIKE '%' + @NOMBRE + '%' OR @NOMBRE IS NULL
Saludos
__________________
Martín Alexis Valdivia S.
-----------------------------
"Quisiéramos cambiar el mundo, pero Dios no nos daría el código fuente." CAP
"Si Saber No Es Un Derecho, Seguro Será Un Izquierdo." WD
  #4 (permalink)  
Antiguo 10/03/2008, 07:51
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Re: error en SP

Tienes razon, es preferible en la mayoria de los casos ejecutar el codigo directamente.

Solo que en algunos casos es conveniente evaluar el desempeño de ambos, ya que con like en todos los campos de un catalogo, estarias haciendo un barrido total de la tabla, y en el caso de una tabla con muchos registros, entre menos filtros en el where tipo like es mejor...


Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:59.