求一存储过程

wfexp 2007-01-13 11:39:34
表 zkz
结构
zkzid varchar 10 编号
ids varchar 18 外键编号
zyfl varchar 20 分类

内容
zkzid ids zyfl
02002 11 A
02003 33 A
03004 32 B
03005 42 B


现在需要插入一条记录,规则如下:
根据分类字段 zyfl 来插入 必须在最大的编号递增
比如 增加一个分类为B的数据,
插入的数据就为 03006 55(数据) B

请教这存储过程如何写 啊
...全文
439 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2007-01-21
  • 打赏
  • 举报
回复
create proc test @ids int,@zyfl varchar(2)
as
declare @s varchar(100)
select @s='000000'
select @s=right(@s+rtrim((max(cast(zkzid as int))+1)),5) from zkz--把6改为5,取字符右边5位
insert zkz
select @s,@ids,@zyfl
create proc test @ids int,@zyfl varchar(2)
as
declare @s varchar(100)
select @s='000000'
select @s=right(@s+rtrim((max(cast(zkzid as int))+1)),5) from zkz--把6改为5,取字符右边5位
insert zkz
select @s,@ids,@zyfl
--测试
exec test 55,'B'

select * from zkz


zkzid ids zyfl
---------- ------------------ --------------------
02002 11 A
02003 33 A
03004 32 B
03005 42 B
03006 55 B

(所影响的行数为 5 行)
中国风 2007-01-21
  • 打赏
  • 举报
回复
少了一个')'括号
create table zkz(zkzid varchar(10), ids varchar(18), zyfl varchar(20))
insert zkz select '02002', 11, 'A'
insert zkz select '02003', 33, 'A'
insert zkz select '03004', 32, 'B'
insert zkz select '03005', 42, 'B'

create proc test @ids int,@zyfl varchar(2)
as
declare @s varchar(100)
select @s='000000'
select @s=right(@s+rtrim((max(cast(zkzid as int))+1)),6) from zkz
insert zkz
select @s,@ids,@zyfl

exec test 55,'B'

select * from zkz

zkzid ids zyfl
---------- ------------------ --------------------
02002 11 A
02003 33 A
03004 32 B
03005 42 B
003006 55 B

(所影响的行数为 5 行)

--drop table zkz
--drop proc test
marco08 2007-01-14
  • 打赏
  • 举报
回复
如果是存储过程要先定义变量接收返回值
wfexp 2007-01-14
  • 打赏
  • 举报
回复
我想要一个存储过程的代码.直接拷贝过去就能用的.谢谢

create proc test @ids int,@zyfl varchar(2)
as
declare @s varchar(100)
select @s='000000'
select @s=right(@s+rtrim((max(cast(zkzid as int))+1),6) from zkz
insert zkz
select @s,@zkzid,@ids,@zyfl
这个报错.rtrim 参数不对

creat proc proc_insert
(
@zyfl varchar(10)
,@ids int
)
AS
insert into zkz(zkzid, ids, zyfl)
select
(select max(zkzid)+1 from zkz where zyfl = @zyfl)
,@ids
,@zyfl
没有进行zkzid的处理
marco08 2007-01-14
  • 打赏
  • 举报
回复
如何不行啊?
marco08 2007-01-14
  • 打赏
  • 举报
回复
最好用函数直接返回一个数值
wfexp 2007-01-14
  • 打赏
  • 举报
回复
可不可以直接用存储过程来实现.而不用函数那.
再次感谢 marco08(天道酬勤)
wfexp 2007-01-14
  • 打赏
  • 举报
回复
那请问如何写调用fun函数的存储过程呢
creat proc proc_insert
(
@zyfl varchar(10),
@ids varchar(20)
)
AS
insert into zkz(zkzid, ids, zyfl)
select
(select dbo.fun(@zyfl)),
@ids,
@zyfl
这样可以吗
marco08 2007-01-14
  • 打赏
  • 举报
回复
--创建表
create table zkz(zkzid varchar(10), ids varchar(18), zyfl varchar(20))
insert zkz select '02002', 11, 'A'
insert zkz select '02003', 33, 'A'
insert zkz select '03004', 32, 'B'
insert zkz select '03005', 42, 'B'

--创建函数
create function fun(@zyfl varchar(20))
returns varchar(10)
as
begin
declare @re varchar(10)

select @re=max(zkzid) from zkz where zyfl=@zyfl

set @re=right('00000'+rtrim(@re+1), 5)

return @re
end

--插入数据
insert zkz select dbo.fun('B'), 55, 'B'

--查询数据
select * from zkz

--result
/*
zkzid ids zyfl
---------- ------------------ --------------------
02002 11 A
02003 33 A
03004 32 B
03005 42 B
03006 55 B

(5 row(s) affected)

*/


--这样可以吗?
wfexp 2007-01-14
  • 打赏
  • 举报
回复
请多多指导.你那些怎么用的
marco08 2007-01-14
  • 打赏
  • 举报
回复
那我写的不行吗?
vovo2000 2007-01-13
  • 打赏
  • 举报
回复
creat proc proc_insert
(
@zyfl varchar(10)
,@ids int
)
AS
insert into zkz(zkzid, ids, zyfl)
select
(select max(zkzid)+1 from zkz where zyfl = @zyfl)
,@ids
,@zyfl
中国风 2007-01-13
  • 打赏
  • 举报
回复
create proc test @ids int,@zyfl varchar(2)
as
declare @s varchar(100)
select @s='000000'
select @s=right(@s+rtrim((max(cast(zkzid as int))+1),6) from zkz
insert zkz
select @s,@zkzid,@ids,@zyfl
marco08 2007-01-13
  • 打赏
  • 举报
回复
create table zkz(zkzid varchar(10), ids varchar(18), zyfl varchar(20))
insert zkz select '02002', 11, 'A'
insert zkz select '02003', 33, 'A'
insert zkz select '03004', 32, 'B'
insert zkz select '03005', 42, 'B'


create function fun(@zyfl varchar(20))
returns varchar(10)
as
begin
declare @re varchar(10)

select @re=max(zkzid) from zkz where zyfl=@zyfl

set @re=right('00000'+rtrim(@re+1), 5)

return @re
end

insert zkz select dbo.fun('B'), 55, 'B'

select * from zkz

--result
zkzid ids zyfl
---------- ------------------ --------------------
02002 11 A
02003 33 A
03004 32 B
03005 42 B
03006 55 B

(5 row(s) affected)
wfexp 2007-01-13
  • 打赏
  • 举报
回复
需要一个存储过程,语句我知道的.因为我刚接触存储过程
冷箫轻笛 2007-01-13
  • 打赏
  • 举报
回复
insert into zkz(zkzid,ids,zyfl)
select zkzid = (select right('0000'+cast(cast(max(zkzid) as int) + 1 as varchar),5) from zkz where zyfl = 'B'),55,'B'
wfexp 2007-01-13
  • 打赏
  • 举报
回复
还是不行啊.请大哥们再帮帮忙把
wfexp 2007-01-13
  • 打赏
  • 举报
回复
也就是要插入数据,有分类zyfl B 和 外键编号 55 需要增加一条数据.其中zkzid有一定规则
wfexp 2007-01-13
  • 打赏
  • 举报
回复
55是用变量输入的,
冷箫轻笛 2007-01-13
  • 打赏
  • 举报
回复
55是怎么得出来的阿?

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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