存储过程循环插入/更新/删除数据,写法,求助!

水向东流时光怎么偷 2014-04-03 02:39:06

CREATE procedure [dbo].[p_add_SMenuList]
@Menucode nvarchar(50),
@MenuName nvarchar(50),
@MenuYN bit,
@MenuOrdID int,
@MenuJpgID int,
@MenuUsr nvarchar(50),
@ID nvarchar(50),
@sl nvarchar(50) output
as
declare @count int;
begin tran
select @count=COUNT(1)from SMenuList where Menucode=@Menucode and MenuName=@MenuName
if @count=0
begin
insert into SMenuList(ID,Menucode,MenuName,MenuYN,MenuOrdID,MenuJpgID,MenuUsr,Menutime,MenuID,MenuUsrID,Menugrade)
values(@ID,@Menucode,@MenuName,@MenuYN,@MenuOrdID,@MenuJpgID,@MenuUsr,GETDATE(),'0999','SystemMenu','1');
--例如A表有一个A1字段,内容为:001,002,003
--把上面插入语句判断A表A1字段有多少个内容插入多少次如下;
-- insert into SMenuListUsr(ID,Menucode,MenuName,MenuYN,MenuOrdID,MenuJpgID,MenuUsr,Menutime,MenuID,MenuUsrID,Menugrade)
-- values(@ID,@Menucode,@MenuName,@MenuYN,@MenuOrdID,@MenuJpgID,@MenuUsr,GETDATE(),'0999','001','1');
-- insert into SMenuListUsr(ID,Menucode,MenuName,MenuYN,MenuOrdID,MenuJpgID,MenuUsr,Menutime,MenuID,MenuUsrID,Menugrade)
-- values(@ID,@Menucode,@MenuName,@MenuYN,@MenuOrdID,@MenuJpgID,@MenuUsr,GETDATE(),'0999','002','1');
-- insert into SMenuListUsr(ID,Menucode,MenuName,MenuYN,MenuOrdID,MenuJpgID,MenuUsr,Menutime,MenuID,MenuUsrID,Menugrade)
-- values(@ID,@Menucode,@MenuName,@MenuYN,@MenuOrdID,@MenuJpgID,@MenuUsr,GETDATE(),'0999','003','1');
*/
--
------------------------问题-----------------------------
--1/如果A表内有多个内容,怎么使用循环for插入,对SQL不了解,求助!--
--1/如果是更新或删除做类似操作该怎么来写,谢谢!!--
set @sl='代码:{'+@Menucode+'}、名称:{'+@MenuName+'}保存成功,请查看!';
end
else
begin
set @sl='代码:{'+@Menucode+'}、名称:{'+@MenuName+'}保存失败,数据库已经存在,请核对!';
end
select @sl;
IF @@error <> 0 --发生错误
BEGIN
ROLLBACK TRANSACTION
RETURN 0
END
ELSE
BEGIN
COMMIT TRANSACTION
RETURN 1 --执行成功
END



GO
...全文
449 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
看来真的要进医院了,天天头能,比浆糊还浆糊!
  • 打赏
  • 举报
回复
引用 11 楼 fredrickhu 的回复:
insert into SMenuListUsr(ID,Menucode,MenuName,MenuYN,MenuOrdID,MenuJpgID,MenuUsr,Menutime,MenuID,MenuUsrID,Menugrade)
select @ID,@Menucode,@MenuName,@MenuYN,@MenuOrdID,@MenuJpgID,@MenuUsr,GETDATE(),'0999',A1,'1'
from A 

不就可以了
这么简单?!
--小F-- 2014-04-03
  • 打赏
  • 举报
回复
insert into SMenuListUsr(ID,Menucode,MenuName,MenuYN,MenuOrdID,MenuJpgID,MenuUsr,Menutime,MenuID,MenuUsrID,Menugrade)
select @ID,@Menucode,@MenuName,@MenuYN,@MenuOrdID,@MenuJpgID,@MenuUsr,GETDATE(),'0999',A1,'1'
from A 

不就可以了
  • 打赏
  • 举报
回复
引用 8 楼 fredrickhu 的回复:
这个跟A表数据没有关系吧。 INSERT INTO SMenuListUsr SELECT * FROM A 不就可以了
F姐你理解错了! 给A表有关系 -- insert into SMenuListUsr(ID,Menucode,MenuName,MenuYN,MenuOrdID,MenuJpgID,MenuUsr,Menutime,MenuID,MenuUsrID,Menugrade) -- values(@ID,@Menucode,@MenuName,@MenuYN,@MenuOrdID,@MenuJpgID,@MenuUsr,GETDATE(),'0999','002','1') 上面这个002就是A表A1字段的值!
--小F-- 2014-04-03
  • 打赏
  • 举报
回复
INSERT INTO SMenuListUsr(col1,col2....) SELECT col1,col2,.... A1  FROM A
--前后一一对应就OK了
--小F-- 2014-04-03
  • 打赏
  • 举报
回复
这个跟A表数据没有关系吧。 INSERT INTO SMenuListUsr SELECT * FROM A 不就可以了
  • 打赏
  • 举报
回复
引用 5 楼 fredrickhu 的回复:
一定要循环吗?
declare @i int
set @i=1
 select @count=count(1) from SMenuList where Menucode=@Menucode and MenuName=@MenuName
while @i<=@count

insert into ..... select ..from 表 where @i=...

set @i=@i+1
不用循环,还有其他更好的方法吗?数据量并大,大概在1000条以内, 主要是A表的数据不是固定的,大概有100行以内,也没有办法写死!
jayzhihui 2014-04-03
  • 打赏
  • 举报
回复
循环或游标判断一下,应该没什么特别的!
--小F-- 2014-04-03
  • 打赏
  • 举报
回复
一定要循环吗?
declare @i int
set @i=1
 select @count=count(1) from SMenuList where Menucode=@Menucode and MenuName=@MenuName
while @i<=@count

insert into ..... select ..from 表 where @i=...

set @i=@i+1
發糞塗牆 2014-04-03
  • 打赏
  • 举报
回复
多个查,要么用while、游标一行一行处理,要么insert into xxx select xxx from 表
  • 打赏
  • 举报
回复
A表结构简单: A表 A1字段 001 002 003 F姐数据,数据不在一行,不需要拆分,我现在想知道是查询连一个表有多个数值,取这个数,执行插入/更新/删除!
--小F-- 2014-04-03
  • 打赏
  • 举报
回复
001,002,003 这样的需要分拆了。 先分拆再插入
jayzhihui 2014-04-03
  • 打赏
  • 举报
回复
代码太长看不懂,贴一下表结构和需要的结果!!

22,209

社区成员

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

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