【问题标题】:Generating create stored procedure script using SQL syntax only仅使用 SQL 语法生成创建存储过程脚本
【发布时间】:2021-05-02 03:09:17
【问题描述】:

我知道在 SQL Server Management Studio 中可以使用对象资源管理器生成创建存储过程脚本(右键单击存储过程,“将存储过程编写为...”,创建到)

是否可以仅使用 SQL 语法生成创建脚本字符串?

declare @createSPstring varchar(max)
/*
insert code to generate the create stored procedure string and put it into @createSPString...
*/
select @createSPstring

【问题讨论】:

标签: sql-server tsql stored-procedures dynamic-sql


【解决方案1】:

您可以从视图中获取全文: sys.sql_modules

但是您的选择可能无法获得完整的代码,因为在 SSMS 中删除了 nvarchar(maX)。

一个选项是使用 print 打印定义中的每一行。在这里,我拆分 char(13) 上的定义以获取每一行并使用游标(是的,我知道)来打印每一行。

DECLARE @createSPstring VARCHAR(MAX)
-- get definition of procedure "test"
SELECT @createSPstring = definition
FROM sys.sql_modules
WHERE object_id = OBJECT_ID('test')

-- Declare cursor - split definition on line break
DECLARE rows CURSOR FOR
    SELECT [value] row
    FROM STRING_SPLIT(@createSPstring, CHAR(13))

DECLARE @row NVARCHAR(MAX)
OPEN rows

FETCH NEXT FROM rows INTO @row

WHILE @@fetch_status = 0
BEGIN
    --Print each row
    PRINT REPLACE(@row,'char(10)','')
    FETCH NEXT FROM rows INTO @row
END

【讨论】:

    【解决方案2】:

    从 sys.sql_modules 中选择强制转换(定义为 xml) WHERE object_id = OBJECT_ID('test')

    点击结果,可以得到与你创建的格式相同的sp。唯一的问题是您的 proc 是否使用 > 或

    您需要使用 ctrl+h 手动替换

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多