这么个需求,不知道能否实现?

不胖到130不改名字 2020-08-24 03:54:35

有一个存储过程sp_001,

然后还有其他存储过程sp_002,sp_003....

如果想每次更新了sp_001时,
能否写个sql作业,取到sp_001内容更新其他的sp_002,sp_003?

当然,我知道C#写个程序或者服务能实现,
就是想问问,sql能实现吗?
...全文
149 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
datafansbj 2020-08-25
  • 打赏
  • 举报
回复
使用 SQL 处理存储过程的基本步骤:
1、从系统视图中查询出存储过程的内容,存放到临时表(insert into test exec sp_helptext 'sp_001')
2、处理这个临时表,将内容读出,保存在变量中(注意 SQL 变量长度有限制,你可能需要定义多个变量来处理)
3、拼接 SQL,将上述内容拼接成新的 SQL 语句(存储过程代码)
4、执行新的 SQL 语句

上述操作可以实现将一个存储过程复制成一个新的存储过程,或覆盖一个已有的存储过程。
  • 打赏
  • 举报
回复
我是知道这种办法的, 定义多个变量,防止超长, 只不过我觉得这种方法有点不靠谱,虽然是能实现, 以后存储过程内容越来越多的话,又要来定义多几个变量了..... 就想问问有没有其他方法的, 不过算了,实在没有就就这样吧
卖水果的net 2020-08-24
  • 打赏
  • 举报
回复
引用 4 楼 不胖到130不改名字 的回复:
[quote=引用 3 楼 卖水果的net 的回复:]两个方法你参考一下: 1、执行 sp_helptext 把文本查出来,再修改一下存储过程的名称。 2、让 sp2 和 sp3 直接调用 sp1 就可以。
暂时不说第二个 第一个如果查出来,字符超长问题如何解决?[/quote]

create table test(name varchar(255))
go
create procedure sp_001 
as
begin
    select 1;
end;
go

-- 把这个文本写到 test 表中。
insert into test exec sp_helptext 'sp_001'
go

select * from test
go
drop table test
go
drop procedure sp_001
go

  • 打赏
  • 举报
回复
引用 3 楼 卖水果的net 的回复:
两个方法你参考一下: 1、执行 sp_helptext 把文本查出来,再修改一下存储过程的名称。 2、让 sp2 和 sp3 直接调用 sp1 就可以。
暂时不说第二个 第一个如果查出来,字符超长问题如何解决?
卖水果的net 2020-08-24
  • 打赏
  • 举报
回复
两个方法你参考一下: 1、执行 sp_helptext 把文本查出来,再修改一下存储过程的名称。 2、让 sp2 和 sp3 直接调用 sp1 就可以。
  • 打赏
  • 举报
回复
引用 1 楼 卖水果的net 的回复:
修改 sp_001 的文本时?
就是一个存储过程sp_001修改了, 想写个作业定时获取sp_001的脚本去覆盖更新sp_002、sp_003 这几个存储过程除了名称外,里面的脚本都是一样的
卖水果的net 2020-08-24
  • 打赏
  • 举报
回复
修改 sp_001 的文本时?

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧