如何将两个表的数据用一个存储过程来提交?
表头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
--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
*/
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
--建表
--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