none
Consultas sin saber determinar la cantidad de condiciones RRS feed

  • Pregunta

  • Hola amigos de Sql pues quería saber si es posible desarrollar una consulta si saber cuantos condiciones podría tener, me refiero a :

    por ejemplo: quiero consultar la tabla pelicula.

    select * from pelicula

    bueno hasta ahi todo normal, pero que pasa si yo quiero 

    visualizar las peliculas del ActorA y el ActorB (osea puede ser que selecciones en mi consulta  al Actor W y al Actor X y la consulta ya no fuera por 2 actores si no por cuatro y asi pudiendo sumar mas opciones) del genero Romántico y a la vez del genero terror.

    En conclusion tuviera 4 actores (que podría seleccionar mas o menos) y tendría por 2 generos

    No pudiendo establecer la cantidad de condiciones ya que mi tabla actor puede ir incrementadose con el paso del tiempo, asi como mi tabla genero.

    Este ejemplo es ficticio  pero queria me digan, si es posible volver una consulta dinamicamente o bueno no se como llamarla.

    Saludos


    "SI LOGRAS CONCENTRARTE EL MUNDO DEJARA DE EXISTIR"

    jueves, 6 de junio de 2013 13:56

Respuestas

Todas las respuestas

  • Echa un vistazo a este artículo de Erland Sommarskog, ahí detalla las opciones que tienes para implementar una solución a tu escenario: Dynamic Search Conditions in T-SQL
    jueves, 6 de junio de 2013 13:59
  • Hola, hay varios documentos por la red al respecto, tienes como opción:

    Te dejo algunas ligas:

    Aunque considero que si estas entrando en este tema, también debes leer sobre SQL INJECTION.

    SALUDOS


    Sergio Sánchez Arias
    Oaxaca,México
    AYÚDANOS A AYUDARTE

    jueves, 6 de junio de 2013 14:02
  • USE master 
    GO
    CREATE DATABASE PELICULA
    USE PELICULA
    GO
    CREATE TABLE Actor
    	[IdActor] [int] IDENTITY(1,1) NOT NULL,
    	[DesActor] [varchar](50) NULL,
     CONSTRAINT [PK_Actor] PRIMARY KEY CLUSTERED 
    (
    	[IdActor] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    
    CREATE TABLE Genero(
    	[idGenero] [int] IDENTITY(1,1) NOT NULL,
    	[DesGenero] [varchar](50) NULL,
     CONSTRAINT [PK_Genero] PRIMARY KEY CLUSTERED 
    (
    	[idGenero] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    
    CREATE TABLE Pelicula(
    	[IdPelicula] [int] IDENTITY(1,1) NOT NULL,
    	[DesPelicula] [varchar](50) NULL,
    	[IdActor] [int] NULL,
    	[idGenero] [int] NULL,
     CONSTRAINT [PK_Pelicula] PRIMARY KEY CLUSTERED 
    (
    	[IdPelicula] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    
    SET ANSI_PADDING OFF
    GO
    
    ALTER TABLE [dbo].[Pelicula]  WITH CHECK ADD  CONSTRAINT [FK_Pelicula_Actor] FOREIGN KEY([IdActor])
    REFERENCES [dbo].[Actor] ([IdActor])
    GO
    
    ALTER TABLE [dbo].[Pelicula] CHECK CONSTRAINT [FK_Pelicula_Actor]
    GO
    
    ALTER TABLE [dbo].[Pelicula]  WITH CHECK ADD  CONSTRAINT [FK_Pelicula_Genero] FOREIGN KEY([idGenero])
    REFERENCES [dbo].[Genero] ([idGenero])
    GO
    
    ALTER TABLE [dbo].[Pelicula] CHECK CONSTRAINT [FK_Pelicula_Genero]
    GO
    GO
    INSERT INTO ACTOR  VALUES ('ACTOR A')
    INSERT INTO ACTOR  VALUES ('ACTOR B')
    INSERT INTO ACTOR  VALUES ('ACTOR C')
    INSERT INTO ACTOR  VALUES ('ACTOR D')
    INSERT INTO ACTOR  VALUES ('ACTOR E')
    INSERT INTO ACTOR  VALUES ('ACTOR F')
    INSERT INTO ACTOR  VALUES ('ACTOR G')
    INSERT INTO ACTOR  VALUES ('ACTOR H')
    INSERT INTO ACTOR  VALUES ('ACTOR I')
    INSERT INTO ACTOR  VALUES ('ACTOR J')
    
    INSERT INTO GENERO  VALUES ('ROMANTICO')
    INSERT INTO GENERO  VALUES ('TERROR')
    INSERT INTO GENERO VALUES ('COMEDIA')
    INSERT INTO GENERO  VALUES ('INFANTIL')
    INSERT INTO GENERO  VALUES ('ACCION')
    INSERT INTO GENERO  VALUES ('DRAMA')
    
    
    INSERT INTO PELICULA VALUES  ('PELICULA1',1,1)
    INSERT INTO PELICULA VALUES  ('PELICULA2',1,2)
    INSERT INTO PELICULA VALUES  ('PELICULA3',1,3)
    INSERT INTO PELICULA VALUES  ('PELICULA4',2,1)
    INSERT INTO PELICULA VALUES  ('PELICULA5',2,2)
    INSERT INTO PELICULA VALUES  ('PELICULA6',3,1)
    INSERT INTO PELICULA VALUES  ('PELICULA7',4,1)
    INSERT INTO PELICULA VALUES  ('PELICULA8',4,3)
    INSERT INTO PELICULA VALUES  ('PELICULA9',5,6)
    INSERT INTO PELICULA VALUES  ('PELICULA10',5,4)
    INSERT INTO PELICULA VALUES  ('PELICULA11',6,1)

    Justamente estaba preparando un script al respecto, y me doy con la sorpresa de que ya hay dos respuesta... bueno gracias voy a leer un poco .. pero les dejo de todas maneras el script para  haber si me dan una ayuda extra.

    Saludos


    "SI LOGRAS CONCENTRARTE EL MUNDO DEJARA DE EXISTIR"

    jueves, 6 de junio de 2013 14:35