作成されるたびに新しい実行計画を計算する必要があるため、これを行うことはお勧めしませんが、はい、間違いなく実行できます (すべて可能ですが、常に推奨されるわけではありません)。
以下に例を示します:
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