Bạn lưu dữ liệu kiểu như thế nào vậy. Có phải là câu hỏi mỗi môn nằm ở 1 bảng hở??? cho mình xem cái Diagram dc ko?
Mình có các bảng đề thi trắc nghiệm các môn, có cấu trúc giống nhau: cùng tên trường, kiểu dữ liệu... chỉ khác ở tên bảng.
Các bảng có dạng:
tbl_xxx (macau nvarchar(50), cauhoi nvarchar(max), da1 nvarchar(max), da2 nvarchar(max), da3 nvarchar(max), da4 nvarchar(max), da_dung nvarchar(50))
mình muốn tạo 1 SP để insert câu hỏi vào một bảng đề thi nào đó, với tên bảng và nội dung câu, đáp án là tham số truyền vào. Nhưng mình thử vài cách mà vẫn chưa được. Mong mọi người giúp mình
code mình thử làm đây...
Code:ALTER PROCEDURE [dbo].[them_cau_hoi] @tenbang nvarchar(50), @macau nvarchar(50), @cauhoi nvarchar(max), @da1 nvarchar(max), @da2 nvarchar(max), @da3 nvarchar(max),@da4 nvarchar(max), @da_dung nvarchar(50) AS BEGIN exec ('INSERT INTO [dbo].[tbl_' + @tenbang + '] VALUES(N"' + @macau + '",N"' + @cauhoi + '",N"' + @da1 + '",N"' + @da2 + '",N"' + @da3 + '",N"' + @da4 + '",N"' + @da_dung + '")') END
Bạn lưu dữ liệu kiểu như thế nào vậy. Có phải là câu hỏi mỗi môn nằm ở 1 bảng hở??? cho mình xem cái Diagram dc ko?
bongda24h.tv
mình lưu câu hỏi của mỗi môn vào 1 bảng. Mỗi môn sẽ có mã và bảng tương ứng. Có thể thêm mới môn qua phần mềm, bảng đề tương ứng sẽ được tạo mới. Mình định viết SP insert chung cho các môn, và tên bảng được truyền dưới dạng tham số.
mình cũng định, làm như thế, nhưng sợ sẽ load câu hỏi lâu nếu csdl nhiều
thế bt có cách nào truyền tên bảng cho câu truy vấn insert ko bạn ?
Thử câu này xem nhé
tuy nhiên bạn nói nhiều thì nhiều ra sao??? 1 năm thì bạn dự đoán cái bảng nhiều nhất tăng thêm bao nhiu dòng??? vài triệu ko?Code:Create PROCEDURE [dbo].[them_cau_hoi] @tenbang nvarchar(50), @macau nvarchar(50), @cauhoi nvarchar(4000), @da1 nvarchar(4000), @da2 nvarchar(4000), @da3 nvarchar(4000),@da4 nvarchar(4000), @da_dung nvarchar(50) AS BEGIN exec ('INSERT INTO [dbo].[tbl_' + @tenbang + '] VALUES(N''' + @macau + ''',N''' + @cauhoi + ''',N''' + @da1 + ''',N''' + @da2 + ''',N''' + @da3 + ''',N''' + @da4 + ''',N''' + @da_dung + ''')') END
bongda24h.tv
vậy là mình ko cần quá lo về kích thước của cái bảng đó hả
liệu chọn mã môn vs câu hỏi trong 1 bảng có lâu hơn so với tách ra từng bảng riêng không? vì mình chưa thử với csdl lớn, mình mới chỉ đặt ra vấn đề như thế thôi.
vd chọn random 60 câu trong 200, 300 câu của 1 môn trong bảng tổng hợp đó liệu có khác biệt về tốc độ so với chọn ở từng bảng riêng
Nếu bạn biết cách đánh Idex 1 cách hiệu quả. và bạn viết code SQL tận dụng được Index.
Và bạn biết cách làm cho code của bạn có hiệu suất cao nhất thì mình nghĩ bạn lấy cũng nhanh thôi
Như bạn nói ở trên.
1 bảng riêng lẻ của bạn là 200-300 dòng và bạn random trong đó.
Mình thì mình lưu tất cả vào 1 bảng có 1000 dòng.
khi cần môn nào thì mình select môn đó trong 1000 dòng ra trước-> đổ vào bảng tạm chẳng hạn sau đó xử lí
bongda24h.tv
Để sử dụng dynamic query thì bạn có thể dùng exec như cách của bạn hoặc sp_exectesql, bản thân mình thì hay sử dụng sp_exectesql hơn vì xử lý tham số đầu vào tiện hơn. Nhưng cách lưu điểm của bạn thì chuối quá. Db của bạn đơn giản, dữ liệu ko nhiều thì ko cần lo về performance
Cánh Chym ứ mỏi
ok tks các bạn nhiều
có lẽ mình sẽ tối ưu DB để dễ làm hơn