30/09/2018, 20:45
SQL SERVER .Xin ý tưởng Viết hàm với điều kiện như sau ( đk vét cạn )?
mình có 1 câu hỏi như sau
Lược đồ QH
phần viết hàm tính sl bán được, mã vt và tháng nhập vào thì mình làm được rồi, nhưng cái đk phía sau là nếu tháng k nhập thì tính tất cả thì mình chưa biết cách làm,
xin cảm ơn
Bài liên quan
dùng having isnull(field, gía trị thay thế)
having isnull(field, gía trị thay thế) giá trị thay thế ở đây có thể để nhiều giá trị được k anh
vì tính tất cả các tháng thì nhiều nhất là 12 tháng= 12 giá trị
e thử thì nó chỉ chấp nhận 2 tham số là fiel , và giá trị thay thế
thêm cái điều kiện trên thì having isnull phải làm ntn để nhận được 12 giá trị nhỉ
tương sql không.
nếu hàm thì đơn gian hơn.
thêm 2 biến cục bộ(startdate, enđate), kiêm tra nếu tháng nhập vào là null. thì sét giá trị biện đó là khoảng thời gian cần lấy, trường hợp khác null thì set cùng ngày.
sau đó điêu kiện sẽ như thế này
CHỖ NÀY E THAY BẰNG
( MONTH(HOADON.NGAY) BETWEEN @startdate AND @endate)
có ổn k nhỉ,
khi e gọi hàm
k nhập vào tháng thì lỗi
là sao ta?
đươc, nó là điều kiện trong đoạn. em truyên thiếu tham sô tháng thì bi sai la đúng rồi, không thì dùng optional parameter.
ref: https://technet.microsoft.com/en-us/library/ms189330(v=sql.105).aspx
nhưng đề bài là , nếu k nhập tham số tháng , thì tính tất cả các tháng, nghĩa là ng dùng chỉ nhập mỗi mã vật tư mà anh? thế phải làm sao ạ
SELECT dbo.f_tongslbanduoc6 (‘VT01’)
đọc kỹ cái link anh đưa. không hỏi khi chưa đọc xong.
e chưa đọc , giờ e mới đọc tks a
e chưa hiểu đoạn này lắm, cái tham số mặc định ấy ạ
nó đang check NULL thôi, muốn tự handle lỗi, trả về message mong muốn. tham số đó có ý nghĩa nếu không truyền thì sẽ la có giá trị NULL
e vẫn chưa rõ về tham số mặc định của hàm trong sql , a có thể cho e 1 ví dụ k ạ
ví dụ đơn giản thôi
như em thấy ở trên
cái này, khi em không goi hàm thì sẽ có giá trị là NULL, 2,3
khi có truyền param:
không biết áp dụng nữa. thì cách làm là “thử và sai”. code chạy thử là biết
SET NOCOUNT ON;
nó báo k dùng trong hàm ạ
thế e mới k chạy được
NẾU DÙNG SET NOCOUNT ON; ( cái này e tìm hiểu thì là bỏ qua thông báo lỗi)
thì lỗi
Msg 443, Level 16, State 15, Procedure f_tongslbanduoc6, Line 8
Invalid use of a side-effecting operator ‘SET OPTION ON’ within a function.
còn nếu k bỏ SET NOCOUNT ON;
thì khi gọi hàm
SELECT dbo.f_tongslbanduoc6 (‘VT05’) vẫn bị lỗi
cái của em là function không phải procedure.
thì câu hỏi của e từ đầu là viết hàm mà
nhưng đề yêu cầu
nếu tham số thứ 2 k nhập
nghĩa là chỉ có như thế này
SELECT dbo.f_tongslbanduoc6 (‘VT01’)
chứ hay là phải nhập null, hoặc default vào tham số thứ 2 ạ?
anh ơi, a cho e hỏi chút
a có tài liệu môn thiết kế cơ sở dữ liệu k, cho e xin với tks a
không em ơi, không con giữ cuốn nào
vâng,tks a