我是想实现主表和子表的同时插入,如果得到主表的插入ID就根据这个ID给字表插入信息,我想问,commit为什么没起作用?create proc pro_insertOrder @tableName varchar(32)=null,@childTableName varchar(32)=null,@values nvarchar(200)=null,@childValues nvarchar(200) = null
as
declare @result int
declare @parameter varchar(200)
if @tableName is null or @childTableName is null or @values is null or @childValues is null
begin
return -1
end
begin
exec('insert into ' + @tableName + ' values(' + @values + ')')
select @result = @@IDENTITY
end
if @result is not null
begin
select @parameter = 'insert into '+ @childTableName +' values('+ CAST(@result as varchar) + @childValues+')'
print @parameter
execute @parameter
end
else
begin
commit transaction
return 0
end
go
as
declare @result int
declare @parameter varchar(200)
if @tableName is null or @childTableName is null or @values is null or @childValues is null
begin
return -1
end
begin
exec('insert into ' + @tableName + ' values(' + @values + ')')
select @result = @@IDENTITY
end
if @result is not null
begin
select @parameter = 'insert into '+ @childTableName +' values('+ CAST(@result as varchar) + @childValues+')'
print @parameter
execute @parameter
end
else
begin
commit transaction
return 0
end
go
解决方案 »
- 请各位大哥看看有什么错误
- 求 sqlserver如何批量添加数据的
- 一个简单的SQL语句,在线等,马上结贴
- 如何从A表内的卡段SELECT B表的卡???
- 怎样设置可以让别人访问我的SQL2005?急!在线等
- 机器在某一局域网内,通过公网(internet)如何与这台sql server连接?试了很多次都不成功
- 为什么这样的执行不成功?like"[6-13]__"
- 如何写脚本,升级数据库
- 请问SQL Server7中有双机热备份的功能吗?怎么实现?高分相送!
- 如何把一张表里一个字段的内容复制到您一个字段里去?
- 有关sql语句的问题
- 服务器windows2003上的Sql2000_sq4突然不能访问,重启电脑后正常,过几个小时后又不能访问了.
请高手给改改,在这里先谢过!
那应该是这样吧CREATE PROC pro_insertOrder @tableName VARCHAR(32) = NULL,@childTableName
VARCHAR(32) = NULL,@values NVARCHAR(200) = NULL,@childValues NVARCHAR(200) =
NULL
AS
DECLARE @result INT
DECLARE @parameter VARCHAR(200)
IF @tableName IS NULL
OR @childTableName IS NULL
OR @values IS NULL
OR @childValues IS NULL
BEGIN
RETURN -1
END
BEGIN TRANSACTION --事务开始
BEGIN
EXEC ('insert into ' + @tableName + ' values(' + @values + ')')
SELECT @result = @@IDENTITY
END IF @result IS NOT NULL
BEGIN
SELECT @parameter = 'insert into ' + @childTableName + ' values(' + CAST(@result AS VARCHAR)
+ @childValues + ')'
PRINT @parameter
EXECUTE @parameter
COMMIT TRANSACTION --子表也插入就提交
END
ELSE
BEGIN
ROLLBACK TRANSACTION --如果主表没插入则回滚
RETURN 0
END
GO
as
declare @result int
declare @parameter varchar(200)
if @tableName is null or @childTableName is null or @values is null or @childValues is null
begin
return -1
end
SET XACT_ABORT ON
begin tran
begin
exec('insert into ' + @tableName + ' values(' + @values + ')')
select @result = @@IDENTITY
end
if @result is not null
begin
select @parameter = 'insert int '+ @childTableName +' values('+ CAST(@result as varchar) +','+ @childValues+')'
--print @parameter
execute (@parameter)
if @@ERROR = 0
begin
commit tran
end
else
begin
rollback tran
end
end
else
begin
return 0
end
go