Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 4 của 4
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Thắc mắc tìm kiếm theo nhiều tiêu chí trong SQL

    Mình có 3 dropdownlist và 1 button tìm kiếm. Bây giờ nếu mình chọn drop1 và để 2 drop kia trống thì khi click button nó sẽ tìm kiếm theo giá trị drop1. Nếu chỉ chọn giá trị trên drop2 thì sẽ tìm theo drop2. Nếu chọn 2 giá trị trên drop1 và drop2 thì sẽ ra kết quả theo tiêu chí drop1 và drop2. drop 3 cũng tương tự như thế.

    Mình thử bắt chước theo ví dụ này mà chạy ko được. Nó cứ báo lỗi là yêu cầu phải nhập tham số.
    Mã:
    CREATE PROCEDURE dbo.TimKiemPhim_1
        @Tenphim NVARCHAR(50),
        @NamsxMin INT,
        @NamsxMax INT,
        @Nuocsx NVARCHAR(50),
        @Theloai NVARCHAR(50)
    AS
    SELECT P.*
    FROM dbo.Phim P
    WHERE (@Tenphim IS NULL OR P.Tenphim like '%'+@Tenphim+'%')
    AND (@NamsxMin IS NULL OR P.Namsx >= @NamsxMin)
    AND (@NamsxMax IS NULL OR P.Namsx <= @NamsxMax)
    AND (@Nuocsx IS NULL OR P.Nuocsx = @Nuocsx)
    AND (@Theloai IS NULL OR P.Theloai = @Theloai)

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn đổi thành như thế này thử xem
    CREATE PROCEDURE dbo.TimKiemPhim_1
    @Tenphim NVARCHAR(50),
    @NamsxMin INT,
    @NamsxMax INT,
    @Nuocsx NVARCHAR(50),
    @Theloai NVARCHAR(50)
    AS
    SELECT P.*
    FROM dbo.Phim P
    WHERE (@Tenphim IS NULL OR P.Tenphim like '%'+@Tenphim+'%')
    OR (@NamsxMin IS NULL OR P.Namsx >= @NamsxMin)
    OR (@NamsxMax IS NULL OR P.Namsx <= @NamsxMax)
    OR (@Nuocsx IS NULL OR P.Nuocsx = @Nuocsx)
    OR (@Theloai IS NULL OR P.Theloai = @Theloai)

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    WHERE ... AND ... là giá trị phải có.
    => Giá trị khi nhận store proc phải đầy đủ, không thể thiếu.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Tôi thấy câu store này sai chỗ Where rồi.

    Sửa lại như thế này xem:
    Mã:
    CREATE PROCEDURE dbo.TimKiemPhim_1
        @Tenphim NVARCHAR(50),
        @NamsxMin INT,
        @NamsxMax INT,
        @Nuocsx NVARCHAR(50),
        @Theloai NVARCHAR(50)
    AS
    SELECT P.*
    FROM dbo.Phim P
    WHERE (P.Tenphim = isnull(@Tenphim, '') OR P.Tenphim like '%'+@Tenphim+'%')
    AND (P.Namsx = isnull(@NamsxMin,'') OR P.Namsx >= @NamsxMin)
    AND (P.Namsx = isnull(@NamsxMax,'') OR P.Namsx <= @NamsxMax)
    AND (P.Nuocsx = isnull(@Nuocsx,'') OR P.Nuocsx = @Nuocsx)
    AND ( P.Theloai = isnull(@Theloai,'') OR P.Theloai = @Theloai)
    Cái này chỉ sửa cho nó ko bị sai thôi, còn cho ra kết quả đúng yêu cầu hay ko thì bàn sau.
    Trường hợp cả 5 cái = null hết thì ko có kết quả nào trả về, row = 0
    Nhìn vào store này cho thấy bạn đã ko kiểm tra null từ bên ngoài trước khi truyền vào

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •