Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tạo một thủ tục được lưu trữ trong SQL Server 2017

Thủ tục được lưu trữ là một nhóm các câu lệnh SQL được biên dịch thành một. Các thủ tục được lưu trữ có thể bao gồm logic nghiệp vụ và các cấu trúc lập trình khác.

Trong SQL Server, thủ tục được lưu trữ là một nhóm gồm một hoặc nhiều câu lệnh Transact-SQL hoặc tham chiếu đến phương thức ngôn ngữ thời gian chạy thông dụng (CLR) của Microsoft .NET Framework.

Khả năng lập trình

Một thủ tục được lưu trữ không chỉ là một tập lệnh dài. Đó là một tập lệnh đã được lưu trong SQL Server cụ thể theo Thủ tục được lưu trữ và nó có thể:

  • Chấp nhận các tham số đầu vào (và trả về nhiều giá trị ở dạng tham số đầu ra cho chương trình đang gọi).
  • Chứa các câu lệnh lập trình.
  • Trả lại một giá trị trạng thái cho một chương trình gọi điện để cho biết sự thành công hay thất bại và lý do của bất kỳ sự thất bại nào.

Các thủ tục được lưu trữ thường chứa logic nghiệp vụ. Ví dụ:một thủ tục được lưu trữ có thể chấp nhận các tham số được truyền cho nó và kiểm tra các tham số đó bằng cách sử dụng IF các câu lệnh. Ví dụ:nếu tham số là một giá trị, hãy thực hiện điều này, nếu đó là một giá trị khác, hãy thực hiện điều đó.

Các thủ tục được lưu trữ có thể cải thiện hiệu suất trong một ứng dụng, bởi vì thủ tục đã lưu trữ được phân tích cú pháp và tối ưu hóa ngay khi nó được tạo, sau đó được lưu trữ trong bộ nhớ. Chạy một truy vấn có điều kiện thông qua thủ tục được lưu trữ có thể cực kỳ nhanh chóng - so với một ứng dụng gửi một truy vấn qua mạng, tới SQL Server, sau đó có tất cả dữ liệu được trả lại cho nó trên toàn mạng để nó có thể lọc qua và chọn ra chỉ những bản ghi mà nó quan tâm.

Lợi ích của các thủ tục được lưu trữ

Dưới đây là một số lợi ích chính khi sử dụng các thủ tục được lưu trữ:

Lợi ích Giải thích
Lập trình mô-đun Bạn có thể viết một quy trình đã lưu trữ một lần, sau đó gọi lại quy trình đó từ các phần khác nhau của ứng dụng (và thậm chí từ nhiều ứng dụng).
Hiệu suất Các thủ tục được lưu trữ cung cấp khả năng thực thi mã nhanh hơn và giảm lưu lượng mạng.
  • Thực thi nhanh hơn:Các thủ tục đã lưu trữ được phân tích cú pháp và tối ưu hóa ngay khi chúng được tạo và thủ tục đã lưu trữ được lưu trong bộ nhớ. Điều này có nghĩa là nó sẽ thực thi nhanh hơn rất nhiều so với việc gửi nhiều dòng mã SQL từ ứng dụng của bạn đến SQL Server. Làm điều đó yêu cầu SQL Server biên dịch và tối ưu hóa mã SQL của bạn mỗi khi nó chạy.
  • Lưu lượng mạng giảm:Nếu bạn gửi nhiều dòng mã SQL qua mạng tới Máy chủ SQL của mình, điều này sẽ ảnh hưởng đến hiệu suất mạng. Điều này đặc biệt đúng nếu bạn có hàng trăm dòng mã SQL và / hoặc bạn có nhiều hoạt động trên ứng dụng của mình. Chạy mã trên SQL Server (như một thủ tục được lưu trữ) loại bỏ sự cần thiết phải gửi mã này qua mạng. Lưu lượng mạng duy nhất sẽ là các tham số được cung cấp và kết quả của bất kỳ truy vấn nào.
Bảo mật Người dùng có thể thực thi một thủ tục được lưu trữ mà không cần thực hiện trực tiếp bất kỳ câu lệnh nào. Do đó, một quy trình được lưu trữ có thể cung cấp chức năng cơ sở dữ liệu nâng cao cho những người dùng thường không có quyền truy cập vào các tác vụ này, nhưng chức năng này được cung cấp theo cách được kiểm soát chặt chẽ.

Cách tạo một thủ tục được lưu trữ

Để tạo một thủ tục được lưu trữ, hãy sử dụng CREATE PROCEDURE , theo sau là mã tạo nên thủ tục được lưu trữ. Nếu thủ tục được lưu trữ của bạn sẽ chấp nhận các tham số, chúng cần được bao gồm sau tên.

CREATE PROCEDURE myStoredProcedure AS
...

OR

CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS
...

Ví dụ

Đây là một ví dụ về cách tạo một thủ tục được lưu trữ và sau đó thực thi thủ tục đã lưu trữ đó.

  1. Tạo thủ tục được lưu trữ

    Chạy câu lệnh sau đối với cơ sở dữ liệu Âm nhạc mà chúng tôi đã tạo trong suốt hướng dẫn này.

    Ví dụ này tạo ra một thủ tục được lưu trữ có tên là AlbumsFromArtist. Nó chọn tất cả các album từ một nghệ sĩ được chỉ định khi quy trình được lưu trữ chạy.

    CREATE PROCEDURE spAlbumsFromArtist 
    	@ArtistName varchar(255)
    AS
    	SELECT AlbumName, ReleaseDate
    	FROM Albums
    		INNER JOIN Artists
    		ON Albums.ArtistId = Artists.ArtistId 
    	WHERE Artists.ArtistName = @ArtistName;
    GO
  2. Xem quy trình đã lưu trữ

    Mở rộng Khả năng lập trình> Thủ tục được Lưu trữ trong cơ sở dữ liệu áp dụng để xem thủ tục được lưu trữ mới được tạo của bạn. Bạn cũng có thể mở rộng Tham số của thủ tục được lưu trữ để xem các tham số bạn cần chuyển khi chạy nó.

  3. Thực hiện quy trình đã lưu trữ

    Bây giờ thủ tục được lưu trữ đã được tạo, bạn có thể chạy nó bằng cách sử dụng EXECUTE và chuyển bất kỳ tham số bắt buộc nào.

    Trong ví dụ của chúng tôi, chúng tôi cần nhập tên của nghệ sĩ.

    EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";

    Ngoài ra, bạn có thể bỏ qua tên tham số khi truyền tham số. Như thế này:

    EXECUTE spAlbumsFromArtist "Devin Townsend";

Thay đổi quy trình đã lưu trữ

Bạn có thể sửa đổi quy trình đã lưu trữ của mình bằng ALTER PROCEDURE tuyên bố. Giống như khi bạn thay đổi một dạng xem, bạn có thể thay đổi một thủ tục được lưu trữ bằng cách áp dụng định nghĩa thủ tục mới được lưu trữ.

  1. Thay đổi quy trình đã lưu trữ

    Chạy câu lệnh sau. Thao tác này thêm một cột mới vào kết quả được trả về bởi thủ tục được lưu trữ. Chúng tôi cũng thêm bí danh vào tên cột.

    ALTER PROCEDURE spAlbumsFromArtist 
    	@ArtistName varchar(255)
    AS
    	SELECT 
            al.AlbumName, 
            al.ReleaseDate, 
            g.Genre
    	FROM Albums al
    		INNER JOIN Artists ar
    		ON al.ArtistId = ar.ArtistId 
    		INNER JOIN Genres g
    		ON g.GenreId = al.GenreId 
    	WHERE ar.ArtistName = @ArtistName;
    GO
  2. Thực hiện quy trình đã lưu trữ

    Bây giờ chúng tôi đã thêm Genre vào chế độ xem, thủ tục được lưu trữ hiện trả về cột đó khi chúng tôi thực thi nó.

    EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách xác định giá trị của bạn dưới dạng DBA cho người điều hành tài chính

  2. Chèn ảnh vào trường ảnh SQL Server 2005 chỉ sử dụng SQL

  3. HIỂN THỊ DỮ LIỆU Tương đương trong SQL Server - sp_databases

  4. SQL Server 2008 Dữ liệu dọc sang ngang

  5. Cách nối các chuỗi trong SQL Server với CONCAT ()