日期:2014-05-17  浏览次数:20652 次

如何将两个表的数据用一个存储过程来提交?
表头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
/*
id v
1 aa
2 bb
3 cc
*/

------解决方案--------------------
这个语句:

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
          &nb