首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么将两个表的数据用一个存储过程来提交

2013-11-25 
如何将两个表的数据用一个存储过程来提交?表头1条记录,表体多条记录,想调用存储过程在一个事物内提交,可以

如何将两个表的数据用一个存储过程来提交?
表头1条记录,表体多条记录,想调用存储过程在一个事物内提交,可以做到吗?怎么做呀?
[解决办法]
能說明白點嗎


[解决办法]
将两表的数据做为参数传递,在存储过各再生成sql语句 。外部程序用循环 。



create proc proc_Add
@col1 varchar(20),
@col2 varchar(20),
@val1 int,
@val2 int
as
set nocount on
declare @sql varchar(2000)
set @sql='insert into tb('+@col1+','+@col2+') values('+CAST(@val1 as varchar)+','+CAST(@val2 as varchar)+')'
exec (@sql)
go


[解决办法]
你的数据库是2008r2的吗,如果是的话,有非常简单的方法,直接拼接这样的语句,就可以了:

insert into tb(列)
values(xx),(yy),(zz)



[解决办法]
做个试验,你看看:
--drop table tb

create table tb(id int,v varchar(10))

insert into tb(id,v)
values(1,'aa'),
      (2,'bb'),
      (3,'cc')
      
      
select * from tb
/*
idv
1aa
2bb
3cc
*/

[解决办法]
这个语句:

insert into tb(id,v)
values(1,'aa'),
      (2,'bb'),
      (3,'cc')
      
是自动在一个事务中的,插入3个值的,如果其中有一个值有错误,那么3条记录,都会自动回滚,那么一条也没插入进去
[解决办法]

create PROCEDURE [dbo].[pro_C]
@userName VARCHAR(250),
@passwordNew VARCHAR(256)
AS
BEGIN
BEGIN TRY
BEGIN TRANSACTION


----your sql 

COMMIT TRANSACTION;

END TRY

BEGIN CATCH
  --PRINT 'fail'
ROLLBACK TRANSACTION;
END CATCH
END

[解决办法]
引用:
我的意思是调用一次存储过程是不是只能传一条数据给存储过程,5条记录怎么同时传送给存储过程呢?

个人认为比较合适的是参数用表变量,然后把5调数据变成一个“表”传进去
[解决办法]
引用:
我的意思是调用一次存储过程是不是只能传一条数据给存储过程,5条记录怎么同时传送给存储过程呢?




--建表
--drop table tb

create table tb(id int,v varchar(10))
go


--建存储过程
drop proc dbo.proc_test
go

create proc dbo.proc_test
@sql nvarchar(4000)
as

exec(@sql)

go

        

--在你的客户端,拼接语句      
declare @sql nvarchar(4000)

set @sql = 'set xact_abort on;
            begin tran
              insert into tb(id,v) values(1,''aa'');
              insert into tb(id,v) values(''a'',''bb'');  --这条数据问题
              insert into tb(id,v) values(3,''cc'');
            commit tran'

exec dbo.proc_test @sql


--没有返回结果,说明3条记录都没有插入
select * from tb
  

[解决办法]
把存储过程执行时,报错的信息贴出来:



--建表
--drop table tb

create table tb(id int,v varchar(10))
go


--建存储过程
drop proc dbo.proc_test
go

create proc dbo.proc_test
@sql nvarchar(4000)
as

exec(@sql)

go

        

--在你的客户端,拼接语句      
declare @sql nvarchar(4000)

set @sql = 'set xact_abort on;
            begin tran
              insert into tb(id,v) values(1,''aa'');
              insert into tb(id,v) values(''a'',''bb'');  --这条数据问题
              insert into tb(id,v) values(3,''cc'');
            commit tran'

exec dbo.proc_test @sql
/*
消息 245,级别 16,状态 1,第 4 行
在将 varchar 值 'a' 转换成数据类型 int 时失败。


*/

--没有返回结果,说明3条记录都没有插入
select * from tb
 


[解决办法]
存储过程使用事物就行

如果要五条记录同时传送,把传的参数字符串拼接,到存储过程再分开?
[解决办法]
每次看都是看的模糊  写更是不用说了怎么将两个表的数据用一个存储过程来提交
[解决办法]
在程序中改比较好,如果是 c#的话,在保存主表之前先开个事物判断主表是否保存成功如果保存成功在保存子表
如果子表保存成功 那么提交事务,否则回滚
[解决办法]
在数据库内写代码太乱了 不方便后期更改

热点排行