动态存储过程 临时表

来源:百度知道 编辑:UC知道 时间:2024/05/31 06:36:30
ALTER procedure dbo.pro_GetdudoRireki
@tableName varchar(100) ,
@tableId int,
@oldGetsudoId int,
@newGetsudoId int
AS
begin
declare @minId int, @maxId int, @nextId int, @range int, @intErrorCode int, @sql_select varchar(400), @sql_insert varchar(400)
set @sql_select = N'select * into ##tem_GetsudoRireki from ' + @tableName + N'where KyuyoGetsudoId=@oldGetsudoId '
exec(@sql_select)
--insert into ##tem_GetsudoRireki exec pro_TableStoredProcedure @tableName,@oldGetsudoId
select @minId = min(##tem_GetsudoRireki.Id) from ##tem_GetsudoRireki
select @maxId = max(##tem_GetsudoRireki.Id) from ##tem_GetsudoRireki
exec @nextId = pro_GetSerialNextId @tableId
set @range = (@nextId - @minId + @maxId + 1)
exec pro_SetSerialNextId @tableId, @range
update ##tem_GetsudoRireki set Id = ##tem_GetsudoRireki.Id + @nextId - @minId ,KyuyoGetsudoId = @newGetsud

存储过程没有什么大问题,如果你的外层已经有事务处理了,你就不用在存储过程内进行事务处理了。
事务处理要注意:
1、读"脏"数据(dirty read):即事务在运行中读到了其它事务未提交的数据。
2、不可重复读(unrepeatable read):即事务在运行中再次读取同一数据时,可发现其它事务的更新。
3、"幻象"读(phantom read):即事务在运行中再次执行同一查询时,发现其它事务的更新。