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