如何删除 -- SQL Server 2016 sys.sql_modules 定义中的注释
How to remove -- comments in SQL Server 2016 sys.sql_modules definition
我正在 运行在 sys.sql_modules
上执行 select 语句,以获取我的 CREATE TRIGGER 语句的所有定义。
我想在其他地方使用 运行 的定义。
但是,定义中还包含注释语句
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,> -- =============================================
CREATE TRIGGER
我可以使用嵌套的 REPLACE() 语句,但是变体太多了。
我如何删除评论?
此解决方案假设 'CREATE TRIGGER' 是您要开始查找的位置的标志。只是为了展示它在做什么,它正在寻找 'CREATE TRIGGER' 首先出现的位置,然后抓取从该位置到最后的所有代码:
SELECT CHARINDEX('create trigger', DEFINITION, 0) AS start_of_create_trigger
, DEFINITION AS untrimmed_definition
, RIGHT(DEFINITION, LEN(DEFINITION) - CHARINDEX('create trigger', DEFINITION, 0) + 1) AS trimmed_definition
FROM sys.sql_modules
WHERE DEFINITION LIKE '%create trigger%'
如您所料,如果 'CREATE TRIGGER' 短语出现在描述或评论中,这将被阻止。
我正在 运行在 sys.sql_modules
上执行 select 语句,以获取我的 CREATE TRIGGER 语句的所有定义。
我想在其他地方使用 运行 的定义。
但是,定义中还包含注释语句
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,> -- =============================================
CREATE TRIGGER
我可以使用嵌套的 REPLACE() 语句,但是变体太多了。 我如何删除评论?
此解决方案假设 'CREATE TRIGGER' 是您要开始查找的位置的标志。只是为了展示它在做什么,它正在寻找 'CREATE TRIGGER' 首先出现的位置,然后抓取从该位置到最后的所有代码:
SELECT CHARINDEX('create trigger', DEFINITION, 0) AS start_of_create_trigger
, DEFINITION AS untrimmed_definition
, RIGHT(DEFINITION, LEN(DEFINITION) - CHARINDEX('create trigger', DEFINITION, 0) + 1) AS trimmed_definition
FROM sys.sql_modules
WHERE DEFINITION LIKE '%create trigger%'
如您所料,如果 'CREATE TRIGGER' 短语出现在描述或评论中,这将被阻止。