Sql 语句替换存储过程中字符

xiaoniaodewen 2010-11-08 01:34:02
有一个存储过程
ALTER PROCEDURE prpTest
(
@SiteName nvarchar(50)
)
as

set @SiteName='sohu'

update tblSite set SiteName=@SiteName


-----------------------------------------------------------------
我想替换sohu为baidu,如果用Alter要把存储过程重写一次。
请问有没有简单的方法来实现存储过程中sohu为baidu。

比如类似repalce函数


谢谢!
...全文
360 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovehooho 2010-11-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiaoniaodewen 的回复:]
这个需求主要是想通过在asp.net页面上提交简短sql语句,实现存储过程的修改。
谢谢。
[/Quote]

LZ需考虑,若在asp.net页面上能够通过提交SQL语句的方法实现存储过程的修改的话,那与SQL注入有什么区别呢?那存储过程的存在本身功能之一就是为了防止SQL注入,若能实现修改存储过程那岂不是没有安全性可言。随便加一条修改权限的SQL语句不就能够得到网站信息了?!

所以说若你没有数据库管理权的话,是无法修改的。
lthaoyue 2010-11-08
  • 打赏
  • 举报
回复
replace('startsohuend','sohu','baidu')
lchy110 2010-11-08
  • 打赏
  • 举报
回复
所以说嘛 还是改存储过程实在 那个修改的东东要是变化比较频繁的话 就把存储过程带个参数

g_lbz 2010-11-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xiaoniaodewen 的回复:]

客户增加了需求,需要在N个存储过程中增加一条执行语句。
而且这种需求还会有。
所以用alter方式手工修改存储过程不方便,所以考虑用替换语句,或者插入语句的方法。

谢谢。
[/Quote]
说下个人的建议。
需求发生变化,存储过程需要修改很正常。不清楚楼主未来发生的需求变化是否可控,也就是说,发生的改变是否可以预知,如果可以预知的话,建议对这个存储过程进行优化,使之能够满足未来的需要。或者考虑另外的一种实现方式,把存储过程中会发送变化的部分给独立出来,通过在存储过程中进行调用来将变化的部分模块话,这样再以后的修改中只需要修改会变化的模块即可。

楼主说的实现类似字符串的操作的方法那是不可能的,如果可行的话,那就不需要Sql操作语句了。另外解决你的问题的重点,我觉得是让变化可控,这个可能需要你首先找到那些内容以后会发生变化,然后把该部分内容模块化。
xiaoniaodewen 2010-11-08
  • 打赏
  • 举报
回复
客户增加了需求,需要在N个存储过程中增加一条执行语句。
而且这种需求还会有。
所以用alter方式手工修改存储过程不方便,所以考虑用替换语句,或者插入语句的方法。

谢谢。
g_lbz 2010-11-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xiaoniaodewen 的回复:]

那个存储过程有上千行,如果把整个语句提交过去,太麻烦。

有没有办法,页面提交简单语句,实现存储过程修改,比如在某位置增加一条语句。

有一个存储过程
ALTER PROCEDURE prpTest
(
@SiteName nvarchar(50)
)
as

set @SiteName='sohu'
--比如想在这里插入 一条语句,update tblLog set……
[/Quote]

根据个人经验,楼主说的无法实现,另外不是很理解,存储过程应该是不需要经常变动的东西,为何需要在页面上来修改?如果存储过程需要经常变动,楼主应该考虑用其他的方式来实现需求。
g_lbz 2010-11-08
  • 打赏
  • 举报
回复
Ps:如果是为了在页面上出现较少的代码,传输进入替换的字符串和被替换的字符串,在后台完成替换,但是最终执行的更改语句肯定只能是alter。
nigerenz 2010-11-08
  • 打赏
  • 举报
回复
ALTER PROCEDURE prpTest
(
@SiteName nvarchar(50)
)
as

set @SiteName='baidu'

update tblSite set SiteName=@SiteName

这就能实现LZ所问的。。。
xiaoniaodewen 2010-11-08
  • 打赏
  • 举报
回复
那个存储过程有上千行,如果把整个语句提交过去,太麻烦。

有没有办法,页面提交简单语句,实现存储过程修改,比如在某位置增加一条语句。

有一个存储过程
ALTER PROCEDURE prpTest
(
@SiteName nvarchar(50)
)
as

set @SiteName='sohu'
--比如想在这里插入 一条语句,update tblLog set UserName='TestUser'
update tblSite set SiteName=@SiteName
其它1000多条语句



谢谢
g_lbz 2010-11-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiaoniaodewen 的回复:]

这个需求主要是想通过在asp.net页面上提交简短sql语句,实现存储过程的修改。
谢谢。
[/Quote]
楼主想修改存储过程,只能通过修改存储过程的语法来实现,也就是你写的Alter的语句。你想要的类似字符串替换是不存在的。
chen_ya_ping 2010-11-08
  • 打赏
  • 举报
回复
你传个参数给这个存储过程。
潇湘墙外 2010-11-08
  • 打赏
  • 举报
回复
SQL里好像有replace函数
zrrsj 2010-11-08
  • 打赏
  • 举报
回复
直接在存储过程中改不可以吗?set @SiteName='baidu'。页面中复杂了点
antiking 2010-11-08
  • 打赏
  • 举报
回复
ALTER PROCEDURE prpTest
(
@SiteName nvarchar(50)=NULL
)
as
update tblSite set SiteName=@SiteName
lchy110 2010-11-08
  • 打赏
  • 举报
回复
要在代码里去实现修改里面的一个小细节估计不行
xiaoniaodewen 2010-11-08
  • 打赏
  • 举报
回复
这个需求主要是想通过在asp.net页面上提交简短sql语句,实现存储过程的修改。
谢谢。
lchy110 2010-11-08
  • 打赏
  • 举报
回复
你既然可以alter存储过程那就可以set @SiteName='baidu'了嘛
获取带个参数呗 将baidu 作为一个输入参数就是你的存储过程多个参数

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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