请教一个SQL存储过程?(100分)

  • 主题发起人 主题发起人 houtor
  • 开始时间 开始时间
H

houtor

Unregistered / Unconfirmed
GUEST, unregistred user!
在MSSQL数据库有一个表WBM(有mc,bm两个字段,mc字段放的是汉字,对应的bm字段放的是此汉字五笔码的第一个字根的字母)。现想写一个存储过程,功能:输入一串汉字,返回一串字母(即此串汉字的第一个五笔代码:如:输入“中华人民”,返回“KWWN”,如何做?
 
Create procedure ProWBM
@WBSTR varchar(8000), --傳入的字符串
@ReturnStr varchar(8000) output --返回的字符串
as
set @WBSTR=isnull(@WBSTR,'')
Declare CursorName scroll cursor for select mc,bm from WBM
declare @Return
declare @mc varchar(10)
Declare @bm varchar(10)
set @ReturnStr=@WBSTR
open CursorName
fetch first from CursorName into @mc,@bm
while @@Fetch_status = 0
begin
Replace(@ReturnStr,@mc,@bm)
Fetch next from CursorName into @mc,@bm
end

close CursorName
deallocate CursorName

return 0
 
剛給你寫的,未經測試,不知是否有誤,因為沒有表,數據,所以沒有測!
你試一下吧,思路很簡單的!
 
我也在用这个,试试吧,没问题的:
CREATE PROCEDURE GetFontsWBM
@FONTNAME CHAR(500),
@ERESULT CHAR(500) OUTPUT

AS
DECLARE @BMNAME CHAR(10)
DECLARE @I int
DECLARE @MCNAME CHAR(20)
DECLARE @aFontName CHAR(10)
DECLARE @aFontBm CHAR(500)

SET @ERESULT =SPACE(500)
/*还没出库的处方药品,定义游标*/

SELECT @I = 1
SELECT @aFontBm= SPACE(500)
WHILE ( @I <= LEN(rtrim(ltrim(@FONTNAME) )))
BEGIN
SELECT @aFontName = SUBSTRING(@FONTNAME,@I,1)
DECLARE TECMCUR CURSOR SCROLL FOR SELECT * FROM WBM WHERE MC= @aFontName
DECLARE @FETCH_STATUS INT
OPEN TECMCUR
FETCH FIRST FROM TECMCUR INTO @MCNAME,@BMNAME
CLOSE TECMCUR
DEALLOCATE TECMCUR
/*raiserror ('无法取得流水记录,请稍后重试!', 16, 1)*/
IF @BMNAME <> ""
SELECT @aFontBm= rtrim(ltrim(@aFontBm))+SUBSTRING(@BMNAME,1,1)
ELSE
SELECT @aFontBm= @aFontBm+'V'
SELECT @I = @I+1
END --END WHILE

IF @aFontBm <> ""
SELECT @ERESULT=upper(@aFontBm)
ELSE
SELECT @ERESULT= "V"
GO
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
923
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
回复
0
查看
795
爱音乐的孩子是小白
后退
顶部