SQLServer语句块 记得加事务哦
1.问题描述
先看SQL语句
declare @num nvarchar(100),@CompanyId nvarchar(100),@CompanyName nvarchar(100),@UserId nvarchar(100),@UserName nvarchar(100),@Address nvarchar(100),@Recipient nvarchar(100),@Mobile nvarchar(100),@n int
set @n=1
while(@n<=(select count(1) from 表4 where id not in('20131105130728911120','20131009114531458911','20130926135224993012','20131029113748526011','20131025143000122117','20131024173300791910','20130730101547274696')))
begin
select @CompanyId=ID,@CompanyName=Company,@Address=Address,@UserId=userid,@UserName=UserName,@Recipient=Name,@Mobile=Phone from(
select row_number() over(order by AddTime) as num,* from (
select 表4.ID,Company,表4.Address,表3.ID as userid,UserName,Name,表3.Phone,表4.AddTime
from 表4 left join 表3 on 表3.Com_Number=表4.ID where master=1 and 表4.id not in('20131105130728911120','20131009114531458911','20130926135224993012','20131029113748526011','20131025143000122117','20131024173300791910','20130730101547274696')) as a) as b where num=@n
set @num=replace(replace(replace(replace(CONVERT(nvarchar(100), GETDATE(), 25),'-',''),':',''),'.',''),' ','')+convert(nvarchar(100),cast(floor(rand()*1000) as int))
print '参数:'+@num+' '+@CompanyId+' '+@CompanyName+' '+@UserId+' '+@UserName+' '+@CompanyName+' '+@Address+' '+@Recipient+' '+@Mobile
insert into 表1 values(@num,@CompanyId,@CompanyName,@UserId,@UserName,@CompanyName,'23|297|396','',@Address,'200000',@Recipient,@Mobile,getdate())
update 表2 set InvoiceTitleId=@num where ID in(select ProID from 表5 where ID=@CompanyId)
set @n=@n+1
set @num=''
end
其中 灰色的两个@num插入和修改值不一样 估计可能是执行不同步 语句太快了
2.解决办法:
添加显示事务语句,强制执行完当前语句后执行下一语句
declare @num nvarchar(100),@CompanyId nvarchar(100),@CompanyName nvarchar(100),@UserId nvarchar(100),@UserName nvarchar(100),@Address nvarchar(100),@Recipient nvarchar(100),@Mobile nvarchar(100),@n int
set @n=1
while(@n<=(select count(1) from 表4 where id not in('20131105130728911120','20131009114531458911','20130926135224993012','20131029113748526011','20131025143000122117','20131024173300791910','20130730101547274696')))
begin
begin transaction
select @CompanyId=ID,@CompanyName=Company,@Address=Address,@UserId=userid,@UserName=UserName,@Recipient=Name,@Mobile=Phone from(
select row_number() over(order by AddTime) as num,* from (
select 表4.ID,Company,表4.Address,表3.ID as userid,UserName,Name,表3.Phone,表4.AddTime
from 表4 left join 表3 on 表3.Com_Number=表4.ID where master=1 and 表4.id not in('20131105130728911120','20131009114531458911','20130926135224993012','20131029113748526011','20131025143000122117','20131024173300791910','20130730101547274696')) as a) as b where num=@n
set @num=replace(replace(replace(replace(CONVERT(nvarchar(100), GETDATE(), 25),'-',''),':',''),'.',''),' ','')+convert(nvarchar(100),cast(floor(rand()*1000) as int))
print '参数:'+@num+' '+@CompanyId+' '+@CompanyName+' '+@UserId+' '+@UserName+' '+@CompanyName+' '+@Address+' '+@Recipient+' '+@Mobile
insert into 表1 values(@num,@CompanyId,@CompanyName,@UserId,@UserName,@CompanyName,'23|297|396','',@Address,'200000',@Recipient,@Mobile,getdate())
update 表2 set InvoiceTitleId=@num where ID in(select ProID from 表5 where ID=@CompanyId)
set @n=@n+1
set @num=''
commit
end
问题解决~~
分享到:
相关推荐
SQL SERVER 语句大全.rar SQL SERVER 语句大全.rar
非常好用的SQL Server 抓取SQL语句工具HOOK 非常好用的SQL Server 抓取SQL语句工具HOOK 非常好用的SQL Server 抓取SQL语句工具HOOK 非常好用的SQL Server 抓取SQL语句工具HOOK
SQLServer经典语句大全
经典SQLSERVER语句大全经典SQLSERVER语句大全经典SQLSERVER语句大全经典SQLSERVER语句大全经典SQLSERVER语句大全经典SQLSERVER语句大全
SQL中的代码块 14 数据库中的if和else语句 14 SQL中的while语句 14 Case-End多分支语句 14 子查询 15 视图(虚拟表)和索引 16 视图 16 索引 16 事务管理 17 数据库的安全性 18 建立权限 19 存储过程...
SQLserver语句使用方法,SQLserver语句详细注释,SQLserver
SQLServer语句优化,让你的SQL语句更能减轻服务器的负担。
压缩包中是关于SQL server语句的一些具体例子
SQL Server2005基本方法和语句
SQL Server宝典SQL Server语句大全
SQL语句教程大全SQL语句教程大全SQL语句教程大全SQL语句教程大全SQL语句教程大全SQL语句教程大全SQL语句教程大全SQL语句教程大全SQL语句教程大全SQL语句教程大全SQL语句教程大全SQL语句教程大全SQL语句教程大全SQL...
sql server 的优化 有助于查询的速度
SQLServer语句文档,可以帮助你了解函数使用,提升你的sql语句水平
sqlserver语句全库查询 可以找到关键字所在表及表内字段
sql server 语句大全 1.按姓氏笔画排序: Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as 2.数据库加密: select encrypt('原始密码') select pwdencrypt('原始密码') select ...
经典SQL server语句大全,适合初学者和案头常备
sqlserver自动生成sql语句工具sqlserver转oracle
SQL语句小结. SQLServer语句小结(SQL语句使用整理) SQLServer语句小结(SQL语句使用整理)
用SQL语句j查SQLServer的表结构 用SQL语句j查SQLServer的表结构