none
Ayuda con un procedimiento almacenado. RRS feed

  • Pregunta

  • Hola amigos del foro. Tengo unas vistas (queries) en SQL 2008 Express que quiero pasar a procedimiento almacenado. El caso es que en las vistas yo hago lo siguiente:

     Select Campo1, Campo2, Campo3 FROM Mitabla Where Opcion1='A' OR Opcion2='B' OR Opcion3='C'

    El problema es que las opciones de selección puede ser de 1 a 10 opciones, según sea el caso. ¿Cómo puedo hacer esto en un procedimiento almacenado?

    Gracias.

    martes, 24 de julio de 2012 17:02

Respuestas

  • Pues sí le entendí, aunque hubiera sido ideal que usted mostrara las consultas SQL resultantes para los casos que solicité.  De esa forma iría más a la segura.  Pero bueno, creo que sí entendí.

    Create Procedure dbo.spBuscarAlgo
        @campo1 nvarchar(50) = Null
        , @campo2 nvarchar(50) = Null
        --ETC.  Usted agregue 10 parámetros, uno para cada campo.
        --En mi ejemplo usaré 2 nada más, pero es la misma cosa
        --que con 10 o 20 o 100.
    As
    Begin
        Set NoCount On;
    
        Select *
        From Tabla
        Wheree
            (Campo1 = @campo1 OR @campo1 Is Null)
            And
            (CAmpo2 = @campo2 Or @campo2 Is Null)
            --ETC.  Aquí seguiríamos con los demás campos de igual forma.
        ;
        Return @@Error;
    End

    Ese sería el SP.  En ADO.net se ejecuta igual que cualquier otro SP:  Un SqlCommand con el nombre del SP, el CommandType cambiado para StoredProcedure y 10 parámetros (o la cantidad que sean), cada uno con un valor:  Si quiere pasar NULL entonces use DBNull.Value.  Si el campo es opcional en SQL Server, me parece que el SqlCommand puede omitir los que no se usan.  CREO.  Pruebe primero por si acaso.


    Jose R. MCP
    Code Samples

    • Marcado como respuesta Eder Costa viernes, 27 de julio de 2012 15:22
    martes, 24 de julio de 2012 17:46

Todas las respuestas

  • Dénos un ejemplo de cómo sería consultar por 10 campos, luego uno o más ejemplos de cómo sería consultar por menos de 10 campos.

    Jose R. MCP
    Code Samples

    martes, 24 de julio de 2012 17:17
  • 1. Puede usar esta tecnica en el Administrador de servidor del sql y hacer las modificaciones pertinente en el archivo generado

    2. En el WHERE puede usar CASE (Transact-SQL)

    3. Puede pasar el select como tal.


    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    Blog

    martes, 24 de julio de 2012 17:20
  • Si, es cierto, se me olvidó decir que al seleccionar los campos lo hago desde programa, vb.net 2008 en este caso. Tengo una vista ya creada, en este caso la llamaremos qryVentas, desde el programa  yo armo los campos a seleccionar strWhere="Opcion1='A' OR Opcion2='B' OR Opcion3='C'"

    Cuando ejecuto el programa llamo a la consulta Select Campo1, Campo2, Campo3 FROM Mitabla & strWhere

    No se si me explico con eso

    Gracias Webjose.

    martes, 24 de julio de 2012 17:32
  • Pues sí le entendí, aunque hubiera sido ideal que usted mostrara las consultas SQL resultantes para los casos que solicité.  De esa forma iría más a la segura.  Pero bueno, creo que sí entendí.

    Create Procedure dbo.spBuscarAlgo
        @campo1 nvarchar(50) = Null
        , @campo2 nvarchar(50) = Null
        --ETC.  Usted agregue 10 parámetros, uno para cada campo.
        --En mi ejemplo usaré 2 nada más, pero es la misma cosa
        --que con 10 o 20 o 100.
    As
    Begin
        Set NoCount On;
    
        Select *
        From Tabla
        Wheree
            (Campo1 = @campo1 OR @campo1 Is Null)
            And
            (CAmpo2 = @campo2 Or @campo2 Is Null)
            --ETC.  Aquí seguiríamos con los demás campos de igual forma.
        ;
        Return @@Error;
    End

    Ese sería el SP.  En ADO.net se ejecuta igual que cualquier otro SP:  Un SqlCommand con el nombre del SP, el CommandType cambiado para StoredProcedure y 10 parámetros (o la cantidad que sean), cada uno con un valor:  Si quiere pasar NULL entonces use DBNull.Value.  Si el campo es opcional en SQL Server, me parece que el SqlCommand puede omitir los que no se usan.  CREO.  Pruebe primero por si acaso.


    Jose R. MCP
    Code Samples

    • Marcado como respuesta Eder Costa viernes, 27 de julio de 2012 15:22
    martes, 24 de julio de 2012 17:46