Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Можем ли да напишем подфункция или процедура в друга съхранена процедура

Не препоръчвам да правите това, тъй като всеки път, когато се създава, трябва да се изчислява нов план за изпълнение, но ДА, определено може да се направи (Всичко е възможно, но не винаги се препоръчва).

Ето един пример:

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

Ще получите предупреждението

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.

Можете да заобиколите това предупреждение, като използвате EXEC('sp_helloworld2') по-горе.

Но ако извикате EXEC [sp_helloworld], ще получите резултатите

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. Проблеми с Fluent NHibernate с SQL Server 2008 DATE Стойности на колона

  2. Справка Microsoft.SqlServer.Smo.dll

  3. Съкратете датата само до час/минута

  4. Редки колони в SQL Server:Въздействие върху времето и пространството

  5. Как да деактивирате всички ограничения за проверка в базата данни на SQL Server - SQL Server / TSQL урок, част 87