在 try-catch 块中创建存储过程

Rza*_*sar 3 sql-server t-sql ddl

我正在使用 sqlserver 2014 并尝试创建一个StoredProcedure像这样的内部 try-catch 块:

BEGIN TRY   
  CREATE PROCEDURE [ammeghezi1] (@w INT) AS SELECT '' 
END TRY
BEGIN CATCH
  ...
END CATCH
Run Code Online (Sandbox Code Playgroud)

它无法运行并出现以下错误:Incorrect syntax near 'SELECT' Expecting EXTERNAL.
然后我更改了 sp 如下:(CREATE PROCEDURE [ammeghezi1] (@w INT) AS BEGIN SELECT '' END用 BEGIN-END 块覆盖 sp),但错误没有改变。我还添加了GOafterBEGIN TRY声明,结果变得最糟。
我得出的结论是,spTRY_CATCH块内创建是不切实际的。

这甚至可以spTRY_CATCH块内创建吗?如何?

Dan*_*man 6

CREATE PROCEDURE文档

CREATE PROCEDURE 语句不能在一个批处理中与其他 Transact-SQL 语句组合使用。

如果您需要 try/catch,则需要使用动态 SQL 执行 DDL,以便它位于单独的批处理中:

BEGIN TRY   
    DECLARE @CreateProcedureStatement nvarchar(MAX) =
N'CREATE PROCEDURE [ammeghezi1] (@w INT) AS SELECT ''''';
    EXEC sp_executesql  @CreateProcedureStatement;
END TRY
BEGIN CATCH
    THROW;
END CATCH
GO
Run Code Online (Sandbox Code Playgroud)