Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy możemy napisać podfunkcję lub procedurę wewnątrz innej procedury składowanej?

Nie polecam tego robić, ponieważ za każdym razem należy obliczyć nowy plan wykonania, ale TAK, zdecydowanie można to zrobić (wszystko jest możliwe, ale nie zawsze zalecane).

Oto przykład:

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

Otrzymasz ostrzeżenie

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.

Możesz ominąć to ostrzeżenie, używając EXEC('sp_helloworld2') powyżej.

Ale jeśli zadzwonisz do EXEC [sp_helloworld], otrzymasz wyniki

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. Obrót wielu kolumn w T-SQL

  2. Jak wstawić obiekt blob do bazy danych za pomocą studia zarządzania serwerem sql

  3. Co to jest prosty program lub skrypt wiersza poleceń do tworzenia kopii zapasowych baz danych serwera SQL?

  4. KRZYŻ ZASTOSUJ do przestrzeni nazw, podwęzły zwracają zduplikowane rekordy

  5. Używanie DateTime w SqlParameter dla procedury składowanej, błąd formatu