这个存储过程怎么调用?在线等,谢谢!

dyming0410 2003-06-25 10:32:05
我做了个存储过程,完成的功能是传入一个汉字字符串,返回对应的拼音
首字母,请问:我想当一个table的一个字段填入汉字、或者这个字段的汉字
发生改变时,调用这个存储过程,返回拼音首字母填入或者跟新另一个拼音字段,
我该怎么调用,在何处写?比如我要填入汉字的字段为a字段,要写入拼音的字段为
b字段,它们都在table1中,哪位大侠能帮我写写调用过程吗?我接触SQLSERVER不久,真的不太熟!

我的存储过程如下:
CREATE PROCEDURE dbo.PyPro @strchar char(200) output
AS
SET NOCOUNT ON;
declare @l_len int
declare @ln_i int
declare @lcpy char(100)
declare @lc_char char(100)
declare @py char(100)
set @strchar=upper(Rtrim(@strchar))
set @l_len=len(@strchar)
set @py=''
set @ln_i=1
while (@ln_i<=@l_len)
BEGIN
set @lcpy=substring(@strchar,@ln_i,1)
if (ascii(@lcpy)>=160)
begin
select @lc_char=py.py from py where hz=@lcpy
select @py=Rtrim(@py)+Rtrim(upper(@lc_char))
end
else
begin
select @py=Rtrim(@py)+Rtrim(upper(@lcpy))
end
set @ln_i=@ln_i+1
end
select @strchar= Rtrim(@py)
GO
...全文
28 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dyming0410 2003-06-25
  • 打赏
  • 举报
回复
to happydreamer(小黑-不懂的太多)
你有msn或者QQ吗?
我现在的触发器写好了,但没有达到我想要的效果!你们帮我看看我哪里不对?谢谢各位了!

触发器:在qpsxk表中
CREATE TRIGGER hztopy ON [dbo].[qpsxk]
FOR INSERT, UPDATE
AS
declare @shur_char varchar(100)
declare @shuc_char varchar(100)
select @shur_char=v_spmc from qpsxk
exec dbo.PyPro @shuc_char output
update qpsxk set v_py=@shuc_char from inserted inser where qpsxk.i_spid=inser.i_spid

存储过程
CREATE PROCEDURE dbo.PyPro @strchar char(200) output
AS
SET NOCOUNT ON;
declare @l_len int
declare @ln_i int
declare @lcpy char(100)
declare @lc_char char(100)
declare @py char(100)
set @strchar=upper(Rtrim(@strchar))
set @l_len=len(@strchar)
set @py=''
set @ln_i=1
while (@ln_i<=@l_len)
BEGIN
set @lcpy=substring(@strchar,@ln_i,1)
if (ascii(@lcpy)>=160)
begin
select @lc_char=py.py from py where hz=@lcpy
select @py=Rtrim(@py)+Rtrim(upper(@lc_char))
end
else
begin
select @py=Rtrim(@py)+Rtrim(upper(@lcpy))
end
set @ln_i=@ln_i+1
end
select @strchar= Rtrim(@py)
GO

但当我填写qpsxk中v_spmc字段后,v_py字段没有出现相应的拼音!
我如果只是单独调试存储过程是可以有返回值的!
happydreamer 2003-06-25
  • 打赏
  • 举报
回复
可以把inserted理解为触发器的产生临时表,没有updated
delete触发器对应的是deleted

select @shur_char=v_spmc from inserted
这句有问题,如果批量插入数据,@shur_char取值就有会问题,可能取得是最后一个insert语句中的值

update qpsxk
set v_py=@shuc_char
from inserted a
where qpsxk.i_spid=a.i_spid
dyming0410 2003-06-25
  • 打赏
  • 举报
回复
to liuyun2003(流云)兄,我对应着我的数据库是这样改了改:
CREATE TRIGGER hztopy ON [dbo].[qpsxk]
FOR INSERT, UPDATE
AS
declare @shur_char varchar(100)
declare @shuc_char varchar(100)
select @shur_char=v_spmc from inserted
exec dbo.PyPro @shuc_char output
update qpsxk set v_py=@shuc_char where qpsxk.i_spid=inserted.i_spid
go

现在报错,说inserted与查询表名和别名不匹配!
能说说吗?还有inserted在此是什么意思?为什么没有updated?
先谢谢了!

dyming0410 2003-06-25
  • 打赏
  • 举报
回复
谢谢楼上的朋友,我去试试,成功后马上来结账!
liuyun2003 2003-06-25
  • 打赏
  • 举报
回复
你可以写到触发器里。
create trigger tri_table1_ins_update on table1 for update,insert
as
declare @shur_char varchar(100)
declare @shuc_char varchar(100)
select @shur_char=汉字字段 from inserted
exec dbo.PyPro @shuc_char output
update table1 set 拼音字段=@shuc_char where table1.主键=inserted.主键
go
fanmb 2003-06-25
  • 打赏
  • 举报
回复
是用哪个开发环境?
dyming0410 2003-06-25
  • 打赏
  • 举报
回复
我刚才看了看帮助,改了下,成功了!
触发器代码如下,谢谢各位了,马上结账!
CREATE TRIGGER hztopy_qpsxk ON dbo.qpsxk
FOR INSERT, UPDATE
AS
if update(v_spmc)
begin
declare @shuc_char varchar(200)
select @shuc_char=v_spmc from inserted
exec dbo.PyPro @shuc_char output
update qpsxk set v_py=@shuc_char from inserted a where qpsxk.i_spid=a.i_spid
end

22,209

社区成员

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

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