Từ 1 tới 10 trên tổng số 10 kết quả

Đề tài: [Store Procedure] Insert vào một trong các bảng có cấu trúc giống nhau với tên bảng là tham số truyền vào!

  1. #1
    Ngày gia nhập
    11 2011
    Bài viết
    11

    Mặc định [Store Procedure] Insert vào một trong các bảng có cấu trúc giống nhau với tên bảng là tham số truyền vào!

    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

  2. #2
    Ngày gia nhập
    03 2011
    Bài viết
    467

    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

  3. #3
    Ngày gia nhập
    11 2011
    Bài viết
    11




    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ố.

  4. #4
    Ngày gia nhập
    03 2011
    Bài viết
    467

    Trích dẫn Nguyên bản được gửi bởi chuoi123 Xem bài viết



    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ố.
    bạn xem thử cái diagram ở file đính kèm xem sao???
    Attached Thumbnails Attached Thumbnails untitled.JPG  
    bongda24h.tv

  5. #5
    Ngày gia nhập
    11 2011
    Bài viết
    11

    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 ?

  6. #6
    Ngày gia nhập
    03 2011
    Bài viết
    467

    Mặc định [Store Procedure] Insert vào một trong các bảng có cấu trúc giống nhau với tên bảng là tham số truyền vào!

    Thử câu này xem nhé
    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
    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?
    bongda24h.tv

  7. #7
    Ngày gia nhập
    11 2011
    Bài viết
    11

    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

  8. #8
    Ngày gia nhập
    03 2011
    Bài viết
    467

    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

  9. #9
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    Để 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

  10. #10
    Ngày gia nhập
    11 2011
    Bài viết
    11

    ok tks các bạn nhiều

    có lẽ mình sẽ tối ưu DB để dễ làm hơn

Các đề tài tương tự

  1. MS SQL Lỗi Lỗi Select lồng nhau chỉ trả về được 1 giá trị trong store procedure
    Gửi bởi vuthanhdt05 trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 0
    Bài viết cuối: 08-03-2013, 02:46 PM
  2. Cách truyền tham số cho store procedure theo tên
    Gửi bởi pkthanh92 trong diễn đàn Thắc mắc lập trình Java
    Trả lời: 2
    Bài viết cuối: 17-08-2012, 02:41 PM
  3. Database các truyền store produce nhiều tham số trong mô hình 3 layer
    Gửi bởi tuanngocpt trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 13-06-2011, 08:45 PM
  4. Cách thực thi 1 store procedure để insert dữ liệu như thế nào
    Gửi bởi kupin203 trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 1
    Bài viết cuối: 26-02-2011, 11:07 AM
  5. [ Solved ] Làm sao để insert tiếng việt trong store procedure?
    Gửi bởi dta4c trong diễn đàn Thắc mắc đại cương Database & Reporting
    Trả lời: 4
    Bài viết cuối: 05-09-2008, 11:52 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn