Cuong Servenet > 09-08-18, 11:34 AM
ongke0711 > 09-08-18, 02:37 PM
Cường Servenet SE > 10-08-18, 12:38 AM
(09-08-18, 02:37 PM)ongke0711 Đã viết: Nói chung tôi không rành Store Proc. nhưng ý kiến về cái logic xử lý của bạn khi kiểm tra tính NULL của NgayDathang 1, 2.Minh thích dùng cái SQL động hơn vì nó dễ tùy chỉnh nhiều điều kiện khác nhau : với lại sủ dụng SQL profiler dễ quản lí hoạt động của SQL hơn.
- Chỉ cần 1 trong 2 cái NULL là không hợp lệ, báo lỗi và thoát luôn chứ xử lý chi cho mất thời gian và kết quả không ra đúng như y/c.
IF @TK_NgayDatHang01 IS NOT NULL OR @TK_NgayDatHang02 IS NOT NULL --> trường hợp IF này kết quả trả về rộng quá (Nếu NDH1 not Null thì NDH2 có thể Null hoăc Not Null)
- Sau đó xử lý tiếp nếu NgayDatHang còn lại là NULL thì gán giá trị 1994 hoặc 3000 => kết quả trả về cả đống Records (từ năm 1994 đến NgayDatHang2 hoặc NgayDatHang 1 - năn 3000), nếu CSDL lớn là mệt à. Hơn nữa dữ liệu có đúng y/c đâu mà lấy về cho tốn tài nguyên hệ thống chạy vậy?
Tại sao không xử lý là:
If NDH1 Or NDH 2 Null Then
=> thoát, bắt nhập đầy đủ thông tin NDH
Else
SET @CONDATE01...
.....
End If
--> Chỉ cần dùng 1 IF thay vì 3 IF như hiện tại.
Còn một cái thắc mắc hỏi bạn để tôi học hỏi là: tại sao bạn dùng EXEC (sqlString) mà không dùng EXEC sp_ExecuteSql?
Cường Servenet SE > 10-08-18, 12:44 AM
Nói chung tôi không rành Store Proc. nhưng ý kiến về cái logic xử lý của bạn khi kiểm tra tính NULL của NgayDathang 1, 2.
- Chỉ cần 1 trong 2 cái NULL là không hợp lệ, báo lỗi và thoát luôn chứ xử lý chi cho mất thời gian và kết quả không ra đúng như y/c.
[color=#3333cc]IF @TK_NgayDatHang01 IS NOT NULL OR @TK_NgayDatHang02 IS NOT NULL [/color][color=#ff3333]--> trường hợp IF này kết quả trả về rộng quá (Nếu NDH1 not Null thì NDH2 có thể Null hoăc Not Null)[/color]
- Sau đó xử lý tiếp nếu NgayDatHang còn lại là NULL thì gán giá trị 1994 hoặc 3000 => kết quả trả về cả đống Records (từ năm 1994 đến NgayDatHang2 hoặc NgayDatHang 1 - năn 3000), [font=Tahoma]nếu CSDL lớn là mệt à. Hơn nữa dữ liệu có đúng y/c đâu mà lấy về cho tốn tài nguyên hệ thống chạy vậy
ongke0711 > 10-08-18, 12:31 PM
Cuong Servenet > 10-08-18, 03:36 PM
(10-08-18, 12:31 PM)ongke0711 Đã viết: - Nói về thủ thuật tìm kiếm: không ai tự gây khó cho ứng dụng của mình bằng kiểu tìm kiếm không có giới hạn dưới/ trên như vậy. Đã không nhớ thời gian chính xác thì đã giải quyết bằng nhập 1 khoảng thời gian mà cũng không làm được thì tìm bằng tiêu chí khác đi, bỏ tiêu chí thời gian đi. Cái này gọi là chiều người dùng không đúng chỗ.
- Nói về vụ check NULL, nếu bạn có 4, 5 tiêu chí nữa thì sẽ ra một đống phân nhánh check IF NULL bạn có chắc code không bị sai sót trường hợp nào không?
- Tìm kiếm nhiều tiêu chí thì phải dùng SQL động là không cần bàn cãi. Nhưng cái tôi hỏi là cái lệnh thực thi EXEC: bạn dùng EXEC (@chuỗi sql) không sợ bị SQL injection à? Tôi thấy nhiều người đã khuyên dùng EXEC sp_Executesql rồi mà bạn không áp dụng?
ongke0711 > 10-08-18, 04:10 PM
(10-08-18, 03:36 PM)Cuong Servenet Đã viết: ..
tại sao mình lai làm ra tiêu chí đó :
..
[code]Nói về vụ check NULL, nếu bạn có 4, 5 tiêu chí nữa thì sẽ ra một đống phân nhánh check IF NULL bạn có chắc code không bị sai sót trường hợp nào không?
-> Thế nên mình mới fai dùng cái sql động . Còn hệ cơ sở của mình nó kết nối lên server nên mình dùng cái EXEC (@chuỗi sql) .
Cuong Servenet > 10-08-18, 04:25 PM
(10-08-18, 04:10 PM)ongke0711 Đã viết:(10-08-18, 03:36 PM)Cuong Servenet Đã viết: ..
tại sao mình lai làm ra tiêu chí đó :
..
[code]Nói về vụ check NULL, nếu bạn có 4, 5 tiêu chí nữa thì sẽ ra một đống phân nhánh check IF NULL bạn có chắc code không bị sai sót trường hợp nào không?
-> Thế nên mình mới fai dùng cái sql động . Còn hệ cơ sở của mình nó kết nối lên server nên mình dùng cái EXEC (@chuỗi sql) .
Hehe...có lẽ bạn không hiểu những gì tôi hỏi thì phải.
- SQL động không liên quan gì đế giải thuật IF lồng như tôi hỏi ở trên.
- Còn bạn đang viết Store Proc. thì ai lại không biết bạn đang dùng SQL server làm Back End Database!!! Việc EXEC (@chuỗi Spl) hay EXEC sp_ExecuteSql đều thực thi câu lệnh SQL của bạn và cho kết quả giống nhau chỉ có khác là tính bảo mật của cách 2 cao hơn cách 1. Cách 1 dễ bị hacker chèn chuỗi sql vô (SQL injection) phá hư dữ liệu khi bạn EXEC @sql vậy thôi.
Có lẻ cách tôi hiểu SQL Server còn kém quá nên trao đổi không thông được.
Các bạn chuyên viết ứng dụng với SQL Server hỗ trợ giùm nhé.
ongke0711 > 10-08-18, 04:36 PM