求一存储过程

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

请教这存储过程如何写 啊
...全文
442 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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是怎么得出来的阿?
慧龙照片恢复软件是一个特殊的数据恢复工具,专门用于恢复误删除、格式化、文件系统错误、分区打不开等造成的照片文件丢失;支持硬盘、光盘、U盘、MP3、数码相机、手机、存储卡等存储介质。支持FAT、FAT32、NTFS、CDFS等各种分区格式,但不能恢复在NTFS分区中压缩存储的文件,也不能恢复加密的文件。全盘扫描查找照片数据,不放过任何一个可恢复的照片文件。   慧龙照片恢复软件在恢复文件过程中不会往源分区写入数据,因此可保证不会对源数据造成再次损害,可放心使用。软件还支持从磁盘映像文件中恢复照片文件,方便进行异地数据恢复,软件本身也具有制作磁盘映像文件的功能。   本软件目前仅支持恢复JPG格式的照片文件(更多文件格式正在增加中),JPG格式是最流行的数码照片文件格式,绝大多数数码相机及拍照手机均采用该格式存储照片,因此慧龙照片恢复软件能胜任绝大多数照片文件的恢复任务,照片恢复的成功率也很高。   慧龙照片恢复软件会提取照片文件中的拍照时间,作为恢复出来的文件修改时间,方便恢复后对照片进行整理。只要在文件夹里选择按“修改时间”排序,照片就是按拍照的先后顺序排列了,非常方便。   提示: 不要下载软件到要恢复数据的盘符里,也不要解压文件到要恢复的盘符里,否则可能再次破坏源数据。如果是相机直接连接电脑进行数据恢复,请保证电池电量足够,免得恢复过程中耗完电了,下次又要重新扫描。   为什么选择慧龙照片恢复软件?与其他数据恢复软件相比,慧龙照片恢复软件具有以下特点:   1. 逐一扫描存储扇区,寻找照片数据,提高照片文件恢复成功率;   2. 使用超简单,鼠标点击几下即可开始恢复;   3. 体积小,下载快,绿色软件,无需安装,不会在系统里留下任何垃圾;   4. 不依赖于文件系统,即使目录区、文件分配表完全损毁也能进行恢复;   5. 支持从映像文件恢复照片,因而可完全避免反复扫描对源数据造成损害;软件本身也包含制作映像文件的功能。

34,838

社区成员

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

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