Bài tập 2: Thực thi dữ liệu và Stored Procedure trong SQL Server


Thực hiện bài thực hành theo các yêu cầu sau:

  1. Dùng câu lệnh bcp để export tất cả dữ liệu từ bảng DatHang của CSDL QLBanHang (trong bài thực hành 1) tới c:\DatHang.txt (hoặc  c:\DatHang.csv)
  2. Thay đổi một vài dữ liệu trong file c:\DatHang.txt và lưu lại. Rồi import tới bảng DatHang từ file text này sử dụng câu lệnh bcp
  3. Import DatHang.txt tới bảng DatHang sử dụng BULK INSERT
  4. Tạo một  Linked Server với tên ‘LinkedQLKhachHang’ mà sẽ liên kết tới cơ sở dữ liệu Access có tên ‘QLKhachHang.mdb’ (trước tiên bạn cần tạo một CSDL có tên là QLKhachHang bằng phần mềm Access tương tự như bài tập 1 và nhập dữ liệu vào). Rồi thực hiện việc select dữ liệu sử dụng và thực hiện  OPENQUERY
  5. Sử dụng mô hình kết nối máy tính ad-hoc với các chức năng OPENROWSETOPENDATASOURCE để select dữ liệu từ ‘QLKhachHang.mdb’
  6. Tạo Cursor sau

DECLARE @au_lname varchar(40), @au_fname varchar(20)
DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName FROM Northwind.dbo.Employees
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor INTO @au_lname, @au_fname
WHILE @@FETCH_STATUS = 0
BEGIN
  PRINT 'Author:' + @au_fname + ' ' + @au_lname
  FETCH NEXT FROM Employee_Cursor INTO @au_lname, @au_fname
END
CLOSE Employee_Cursor
DEALLOCATE Employee_Cursor
  1. Tạo Stored Procedure sau và thử thực thi với một vài giá trị

CREATE PROCEDURE AddNewDatHang
@IdDatHang smallint,
@TenSP varchar(50),
@TenKH varchar(50),
@KetQua smallint=1 Output
AS
DECLARE @IdKhachHang smallint
  BEGIN TRANSACTION
  If not Exists(SELECT IdKhachHang FROM KhachHang WHERE [Ten]=@TenKH) 
    BEGIN 
      SET @IdKhachHang= (SELECT Max(IdKhachHang) FROM KhachHang) 
      SET @IdKhachHang=@IdKhachHang+1 
      INSERT INTO KhachHang VALUES(@IdKhachHang,@TenKH) 
      If Exists(SELECT IdDatHang FROM [DatHang] WHERE IdDatHang=@IdDatHang)
        BEGIN 
           SELECT @KetQua=1 
           ROLLBACK TRANSACTION 
        END 
      Else 
        BEGIN 
           INSERT INTO [DatHang](IdDatHang,TenSP,IdKhachHang) VALUES(@IdDatHang,@TenSP,@IdKhachHang) 
           SELECT @KetQua=0 COMMIT TRANSACTION 
        END 
    END 
  Else 
    BEGIN 
      If Exists(SELECT IdDatHang FROM [DatHang] WHERE IdDatHang=@IdDatHang) 
        BEGIN 
         SELECT @KetQua=1 ROLLBACK TRANSACTION 
        END 
     Else 
        BEGIN 
          INSERT INTO [DatHang](IdDatHang,TenSP,IdKhachHang) VALUES(@IdDatHang,@TenSP,@IdKhachHang) 
          SELECT @KetQua=0 COMMIT TRANSACTION 
        END 
  END 
Print @KetQua Return
  1. Sử dung ngôn ngữ lập trình C# hoặc VB.NET để thực thi Stored Procedure ‘AddNewOrder’, Tham khảo thêm bài viết lập trình CSDL với C# và bài giảng lập trình CSDL với ADO.NET

Có thể bạn sẽ thích…

2 phản hồi

  1. 25/05/2017

    […] Trong ví dụ ở trên trước hết ta khai báo một biến @CustomerID sau đó bắt đầu một transaction bằng BEGIN TRANSACTION (toàn bộ công việc insert này được thực hiện trong một Transaction nghĩa là hoặc là insert thành công hoặc là không làm gì cả – all or nothing). Trước hết ta kiểm tra xem người khách hàng là người mới hay cũ. Nếu là người mới thì ta “tiện tay” insert vào bảng Customers luôn còn nếu không thì chỉ insert vào bảng Orders mà thôi. Nếu là người customer mới ta lấy CustomerID lớn nhất từ bảng Customers bỏ vào biến @CustomerID và sau đó tăng lên một đơn vị dùng cho việc Insert Customer ở dòng kế tiếp. Sau khi insert khách hàng mới mới ta tiếp tục công việc bằng việc kiểm tra xem Order muốn insert đã tồn tại chưa (vì nếu order đã tồn tại thì khi insert SQL Server sẽ báo lỗi do OrderID là Primary key). Nếu như order trên vì lý do nào đó đã có trong DB thì ta roll back và trả kết quả =1 còn nếu không thì ta insert một order mới vào và commit transaction với kết quả trả về =0. Tương tự như vậy nếu khách hàng đã tồn tại (sau chữ else đầu tiên) thì ta chỉ việc insert order giống như trên. Trong mọi trường hợp kể trên ta đều in ra kết quả và return. Ví dụ trên đây chỉ mang tính học hỏi còn trên thực tế database có thể phức tạp hơn nhiều nên việc viết stored procedure đòi hỏi kiến thức vững chắc về SQL và kỹ năng về lập trình. Muốn hiểu rõ hơn về bài học này bạn cần làm bài tập số 2. […]

  2. 25/05/2017

    […] NGuồn: https://timoday.edu.vn/bai-tap-2-thuc-thi-du-lieu-va-stored-procedure-trong-sql-server/ […]

Trả lời

EnglishVietnamese