|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 416 Coins : 400 Thanked : 43  |
[You must be registered and logged in to see this link.]đề này của năm trước, đề mở. Năm nay đề đóng nên sẽ nhẹ hơn đề này. Các bạn theo khung giới hạn của thầy để ôn tập nha, trong đề này có nhiều phần thầy dặn không thi.(câu 3) Trong đề này có 1 câu sử lý truy xuất đồng thời nhưng là lý thuyết, e rằng năm ây sẽ là 1 câu bài tập.  Học miễn phí - Tổ chức hội thảo chuyên nghiệp
※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 85 Coins : 141 Thanked : 11  |
sao mình không down được ta ?  ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 30
Posts : 25 Coins : 36 Thanked : 3  |
Giới hạn nội dung thi lý thuyết QTCSDL 1. Chương II: Tạo Database, pk, Fk ins /del /update (1,5 đ - 2đ) 2. SP/ Function/ Cursor (3 - 4 đ) 3. Trigger (Bảng Tầm ảnh hưởng ==> Trigger) (3 - 4 đ) 4. Điều khiển truy xuất đồng thời (1 - 1,5 đ) Nguồn từ bạn Tuyết Mai Chúc các bạn thi tốt nha. Ah thời điểm này đội Ghanna đang đá với Úc tỉ số hiện giờ là 1-1. Trọng tài đã xử ép đội Úc khi phạt thẻ đỏ 1 cầu thủ, và cho đội Ghanna 1 trái đá phạt đền. ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 30
Posts : 25 Coins : 36 Thanked : 3  |
down được chứ bạn. Mình vừa mới down về nè. bạn thử lại xem. ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 416 Coins : 400 Thanked : 43  |
Đề của thầy Đức chứ của ai nữa   Học miễn phí - Tổ chức hội thảo chuyên nghiệp
※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 30
Posts : 235 Coins : 581 Thanked : 59  |
Bài Giải: - Code:
-
http://www.mediafire.com/?nmmmizyunze
NGUỒN: copy từ phungquanghop  Ôi 1 Thời Để Nhớ.... <br> ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 556 Coins : 2157 Thanked : 168  |
pác kisudo cho hỏi cái nha.Câu trigger ấy.trên bảng hợp đồng thì ok (thiếu mỗi cái fetch next nữa ah :d).còn trên bảng album,tui nghi làm vậy không đúng.mình đâu thể nào lấy ra hết tấc cả các ngày hiệu lực của album insert,update đem +1 thêm dc.nếu lỡ như ngày hiệu lực đó đã lớn hơn ngày hoàn tất thì có phải làm như vậy thừa k.tui nghĩ trên bảng album này mình cũng sẽ làm giống bảng hợp đồng.vậy cho chắc ăn,vì thầy đâu có yêu cầu mình phải làmm trigger tự sửa dữ liệu đâu,mình báo lỗi cho người dùng cũng dc òi mà. ý kiến của tui là vậy.bác xem có dc k?  ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 30
Posts : 235 Coins : 581 Thanked : 59  |
Cái này tui kiếm dc nên up lên cho mọi người, chứ tui có làm đâu..... hok bít làm...  Ôi 1 Thời Để Nhớ.... <br> ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 416 Coins : 400 Thanked : 43  |
Theo thầy thì phải tạo khóa chính lúc tạo bảng nên đoan code tạo bảng phải thế này, và bỏ đoạn thêm khóa chính đi. - Code:
-
create table Album ( MaAlbum varchar(5) primary key, TenAlbum nvarchar(30), TenTheLoai nvarchar(10), TenCaSi nvarchar(30), DonGia float, NgayHoanTat datetime, MaNhaSanXuat varchar(5) ) create table Nha_San_Xuat ( MaNhaSanXuat varchar(5) primary key, TenNhaSanXuat nvarchar(30), DiaChi nvarchar(50), DienThoai varchar(15) ) create table Nha_Phan_Phoi ( MaNhaPhanPhoi varchar(5) primary key, TenNhaPhanPhoi nvarchar(30), DiaChi nvarchar(50) ) create table HopDong ( MaAlbum varchar(5), MaNhaPhanPhoi varchar(5), HieuLucTuNgay datetime, SoLuongBanMua float constraint HD_PK primary key (MaAlbum,MaNhaPhanPhoi) )
cái thủ tục này có cách làm khác ngắn hơn là như thế này: - Code:
-
create proc sp_TongGiaTriHopDong( @manhasanxuat varchar(5), @ngaybatdau datetime,@ngayketthuc datetime) as declare @TongGiaTri float; set @TongGiaTri = (select SUM(HD.SoLuongBanMua*AB.DonGia) from HopDong HD, Album AB where HD.MaAlbum = AB.MaAlbum and AB.MaNhaSanXuat = @manhasanxuat and @ngaybatdau >= HD.HieuLucTuNgay and HD.HieuLucTuNgay <= @ngayketthuc); print('Tong Gia Tri Cua Hop Dong: ' + convert(varchar(30), @TongGiaTri)); Về cái trigger thì trigger này chỉ nằm trên bảng hợp đồng thôi(1 trigger), khi thêm 1 album thì chắc chắn chưa có hợp đồng nào vê album này nên không càn kiểm tra ràng buộc này. các bạn nên làm như thế này - Code:
-
create trigger trg_HopDong on HopDong for insert, update as if exists (select * from AlBum AB, inserted i where i.MaAlbum = AB.MaAlBum and i.HieuLucTuNgay > AB.NgayHoanTat) begin raiserror('Hieu Luc Tu Ngay phai sau ngay hoan tat',16,1); rollback; end Chú Ý: - Code:
-
declare @cr_mang cursor for select MaAlbum, NgayHoanTat from inserted lỗi vì biến cursor không có @, có @ khi nó là 1 biến tham chiếu tới cursor nhưng thầy Đức không dạy cái này.  Học miễn phí - Tổ chức hội thảo chuyên nghiệp
※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 556 Coins : 2157 Thanked : 168  |
bác Quân tuân thủ theo Thầy Đức quá hen,nhưng cái chỗ trigger mình phải dùng cursor để lấy ra hết các maalbum và ngayhieuluc chứ,để tránh trường hợp update dữ nhiều nhiều dòng. ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 416 Coins : 400 Thanked : 43  |
hehe chú nhầm rồi, mình thử nhé. trigger nè,insert xong là xuất số dòng - Code:
-
create trigger trg_HopDong on HopDong for insert, update as declare @SoLuong int; set @SoLuong = (select count(*) from inserted); print @SoLuong; go, thử insert 2 dòng này xem - Code:
-
insert into HopDong values ('12345','44444',GETDATE(),10); insert into HopDong values ('12345','33333',GETDATE(),10); Sau khi insert xong 1 dòng là trigger chạy nên liền - Code:
-
1
(1 row(s) affected) 1
(1 row(s) affected)
 Học miễn phí - Tổ chức hội thảo chuyên nghiệp
※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 556 Coins : 2157 Thanked : 168  |
èo là sao.Trigger àm in ra làm gì.bác không hiểu ý em òi.ý là khi ínẻt có thể người ta insert nhiều dong(gán table chẳng hạn),thì dữ liệu đưa vào bản inserted rất nhiều.khi đó mình cần dùng cursor để láy các dòng dữ liệu ra để kiểm tra.chứ chỉ cần lấy 1 dong như bác có lẻ thiếu.giống như câu trigger của Thầy đức làm ấy mà  ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 416 Coins : 400 Thanked : 43  |
bao nhiêu thi cũng phải insert lần lượt từng dòng 1 hiểu không?
thay vì insert 2 dòng chú mày thử insert bằng câu truy vấn thử xem. nếu câu truy vấn ra được 10 dòng thì trigger sẽ kiểm tra 10 lần  Học miễn phí - Tổ chức hội thảo chuyên nghiệp
※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 556 Coins : 2157 Thanked : 168  |
èo,chú thử đổ dữ liệu từ table này sang table khác coi có đúng như vậy k.nếu đúng như chú noi thì k lẻ thầy Đức sai ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 30
Posts : 28 Coins : 64 Thanked : 22  |
Theo tui được biết Trigger trong SQL khác với Trigger trong Oracle
Trong Oracle khi mình Insert 10 dòng dữ liệu một lúc thì nó sẽ chạy Trigger kiểm tra từng dòng của dữ liệu (tức là mỗi lần bảng New (hay bảng Inserted bên SQL) sẽ chỉ chứa một dòng dữ liệu).
Còn bên SQL thì nó sẽ đưa cả 10 dòng dữ liệu này vào bảng Inserted một lúc sau đó mới chạy Trigger kiểm tra vì vậy bảng Inserted sẽ chứa 10 dòng dữ liệu => phải dùng Cursor để duyệt từng dòng dữ liệu dc truyền vào. ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 50 Coins : 128 Thanked : 32  | ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 30
Posts : 631 Coins : 1810 Thanked : 102  |
sao khó nhai quá vậy ( ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 416 Coins : 400 Thanked : 43  |
- [You must be registered and logged in to see this link.] đã viết:
- èo,chú thử đổ dữ liệu từ table này sang table khác coi có đúng như vậy k.nếu đúng như chú noi thì k lẻ thầy Đức sai
Đúng thiệt, đổ dữ liệu vô thì nó kiểm tra có 1 lần giờ mới biết trước giờ cứ chủ quan là kt n lần, nhưng mà dù có thế thì cái trigger của anh vẫn đúng mặc dù không dùng cursor, chú xem có phải không. - Code:
-
if exists (select * from AlBum AB, inserted i where i.MaAlbum = AB.MaAlBum and i.HieuLucTuNgay > AB.NgayHoanTat)  Học miễn phí - Tổ chức hội thảo chuyên nghiệp
※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 556 Coins : 2157 Thanked : 168  |
chú chơi chiêu lợi hại quá.lấy ra hết tấc cả kiểm tra 1 lần,cách này chú thử chưa,nếu dc thì cho áp dụng ké,hehe  ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 416 Coins : 400 Thanked : 43  |  Học miễn phí - Tổ chức hội thảo chuyên nghiệp
※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 32
Posts : 1 Coins : 1 Thanked : 0  |
èo cho tham gia tí nha. Theo mình thì trigger không viết kiểu cursor vì nếu duyệt từng dòng. Bị lỗi nó sẽ rollback tran. vì vậy sẽ không tiếp tục fetch next được. Do đó viết trigger mà viết cursor là té giếng chắc. đoạn này: if exists (select * from AlBum AB, inserted i where i.MaAlbum = AB.MaAlBum and i.HieuLucTuNgay > AB.NgayHoanTat)
nên sửa lại: (i.HieuLucTuNgay < = AB.NgayHoanTat )-->vi SX ra album mới cho thuê chứ. vì vậy chưa ra mà cho thuê thì rollback tran. xin lỗi vì mình 08DBA mà chen ngang vào cuộc tranh cãi. Mong các bạn đừng chửi nha. ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 30
Posts : 235 Coins : 581 Thanked : 59  |
- Trích dẫn :
- (i.HieuLucTuNgay < = AB.NgayHoanTat )-->vi SX ra album mới cho thuê chứ. vì vậy chưa ra mà cho thuê thì rollback tran.
vd: ngày hoàn tất : 5/5/1990 ngày hiệu lực : 4/5/1990 ---> tui hơi gà, thắc mắc đừng cười tội em.... 4/5/1990 < 5/5/1990 hay 5/5/1990 < 4/5/1990 hic  Ôi 1 Thời Để Nhớ.... <br> ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 556 Coins : 2157 Thanked : 168  |
- [You must be registered and logged in to see this link.] đã viết:
- èo cho tham gia tí nha. Theo mình thì trigger không viết kiểu cursor vì nếu duyệt từng dòng. Bị lỗi nó sẽ rollback tran. vì vậy sẽ không tiếp tục fetch next được. Do đó viết trigger mà viết cursor là té giếng chắc.
đoạn này: if exists (select * from AlBum AB, inserted i where i.MaAlbum = AB.MaAlBum and i.HieuLucTuNgay > AB.NgayHoanTat)
nên sửa lại: (i.HieuLucTuNgay < = AB.NgayHoanTat )-->vi SX ra album mới cho thuê chứ. vì vậy chưa ra mà cho thuê thì rollback tran. xin lỗi vì mình 08DBA mà chen ngang vào cuộc tranh cãi. Mong các bạn đừng chửi nha. Đúng như chú Kitsudo nói.bạn sai chỗ đó òi. dùng cursor cho trigger thì là chuyện bình thường có gì đâu.nếu đã rollback tran tới đâu thì nó cũng đã return tới đó,có làm dc gì những hàm ở dưới đâu mà sợ nè ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 556 Coins : 2157 Thanked : 168  |
- [You must be registered and logged in to see this link.] đã viết:
Về cái trigger thì trigger này chỉ nằm trên bảng hợp đồng thôi(1 trigger), khi thêm 1 album thì chắc chắn chưa có hợp đồng nào vê album này nên không càn kiểm tra ràng buộc này.
các bạn nên làm như thế này
- Code:
-
create trigger trg_HopDong on HopDong for insert, update as if exists (select * from AlBum AB, inserted i where i.MaAlbum = AB.MaAlBum and i.HieuLucTuNgay > AB.NgayHoanTat) begin raiserror('Hieu Luc Tu Ngay phai sau ngay hoan tat',16,1); rollback; end ah,chú Quân ơi,tui nghĩ phải có cái trigger kiểm tra trên bảng Album nữa đấy,theo như lời bác nói thì thiếu mất 1 trường hợp update.khi update khi maalbum đã có rùi chứ nhỉ.Cẩn thận chỗ này nè ※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
Member  Giới tính :  Tuổi : 31
Posts : 416 Coins : 400 Thanked : 43  |
rồi công nhận sai, sửa dấu '>' thành dấu '<', thi mà bị trừ điểm vì lỗi này chắc suốt phần đời còn lại cũng không nghĩ ra. còn cái vụ trigger trên bảng Album nữa thì cũng có lý nhưng mà có lý vậy thôi chứ làm gì có ai dám khảng định là không có là sai, thích thì làm thêm vô, biếng thì khỏi ráng đọc thêm chút nha: nếu lỡ làm hợp đồng về album aaa rồi sau đó sủa ngày hoàn tất lùi lại - không lẽ như vậy cũng phải lùi ngày có hiệu lực, trong thực tế những điều trong hợp đồng là phải thương lượng rất khó mới có được - hay xoá cái hợp đồng đó đi, quá vô lý - không cho lùi ngày hoàn tất, trong khi mai mới hoàn tất mà trong cơ sở dữ liệu ghi là hoàn tất ngày hôm nay (csdl sai) vậy nên mới nói là khỏi thêm cái trigger trên bảng album.  Học miễn phí - Tổ chức hội thảo chuyên nghiệp
※ Bài viết cùng chuyên mục
|
|
| |
|
Tác giả | Thông điệp |
---|
 | ※ Bài viết cùng chuyên mục
|
|
| |
|
|