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

Chúng ta có thể viết một hàm con hoặc thủ tục bên trong một thủ tục được lưu trữ khác không

Tôi không khuyên bạn nên làm điều này vì mỗi khi nó được tạo, một kế hoạch thực thi mới phải được tính toán, nhưng CÓ, nó chắc chắn có thể được thực hiện (Mọi thứ đều có thể, nhưng không phải lúc nào cũng được khuyến khích).

Đây là một ví dụ:

CREATE PROC [dbo].[sp_helloworld]
AS
BEGIN
    SELECT 'Hello World'
    DECLARE @sSQL VARCHAR(1000)
    SET @sSQL = 'CREATE PROC [dbo].[sp_helloworld2]
            AS
            BEGIN
                SELECT ''Hello World 2''
            END'
    EXEC (@sSQL)

    EXEC [sp_helloworld2];
    DROP PROC [sp_helloworld2];
END

Bạn sẽ nhận được cảnh báo

The module 'sp_helloworld' depends on the missing object 'sp_helloworld2'.
The module will still be created; however, it cannot run successfully until
the object exists.

Bạn có thể bỏ qua cảnh báo này bằng cách sử dụng EXEC ('sp_helloworld2') ở trên.

Nhưng nếu bạn gọi EXEC [sp_helloworld], bạn sẽ nhận được kết quả

Hello World
Hello World 2


  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 đặt giá trị bool trong SQL

  2. Gặp lỗi tự động tạo tệp cơ sở dữ liệu SQLExpress cho trang web sử dụng AspNetSqlMembershipProvider, nhưng chuỗi kết nối là với SQL Server 2005

  3. Cập nhật bản ghi trong bảng từ CTE

  4. JPA GenerationType.AUTO không xem xét cột có tăng tự động

  5. Định cấu hình thư cơ sở dữ liệu trong SQL Server