1 添加一个id自增表t_Next FUserID(用户唯一标示符) FTableName(要唯一id号的表的名称) FNextNo(下一个id号)

2 添加存储过程如下

GO
Create proc [dbo].[p_Next]
@pCOID varchar(40),
@pTblname varchar(40),
@pStep int,
@pIdentity bigint out
as

if @pTblname='t_A' or @pTblname='t_B' set @pCOID='system' 特殊情况处理

begin try
begin tran

update t_Next
set @pIdentity=FNext,FNext=FNext+@pStep
where FCOID=@pCOID and FName=@pTblname

if @@rowcount=0
begin
if @pTblname='t_A'
set @pIdentity=1
else
select @pIdentity=FCompanyID*10000000000+1
from t_Company
where fcoid=@pCOID

insert into t_Next(FCOID,FName,FNext)
values(@pCOID,@pTblName,@pIdentity+@pStep)

end
commit tran
end try
begin catch
if @@trancount>0 rollback tran
print Error_Number()
print Error_Message()
end catch

PS:存储过程语法

一、简介:

存储过程(Stored Procedure), 是一组为了完成特定功能的SQL 语句,集经编译后
存储在数据库中,用户通过指定存储过程的名字并给出参数,如果该存储过程带有参数来执行

它,
在SQL Server 的系列版本中,存储过程分为两类:系统提供的存储过程和用户自定义存储过程


系统SP,主要存储master 数据库中,并以sp_为前缀并且系统存储过程主要是从系统表中获取
信息,从而为系统管理员管理SQL Server。 用户自定义存储过程是由用户创建,并能完成
某一特定功能,如:查询用户所需数据信息的存储过程。

存储过程具有以下优点
1.存储过程允许标准组件式编程(模块化设计)
存储过程在被创建以后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句,而

且数
据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响。因为应用程序源代

码只包含存
储过程的调用语句,从而极大地提高了程序的可移植性。

2.存储过程能够实现快速的执行速度
如果某一操作包含大量的Transaction-SQL 代码,,或分别被多次执行,那么存储过程要比批处理


执行速度快很多,因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进

行分析优
化,并给出最终被存在系统表中的执行计划,而批处理的Transaction-SQL 语句在每次运行时

都要进行
编译和优化,因此速度相对要慢一些。

3.存储过程能够减少网络流量
对于同一个针对数据数据库对象的操作,如查询修改,如果这一操作所涉及到的Transaction-SQL 
语句被组织成一存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调

用语句,否
则将是多条SQL 语句从而大大增加了网络流量降低网络负载。

4.存储过程可被作为一种安全机制来充分利用
系统管理员通过,对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访问权限的


制。

二、变量

@I

三、流程控制语句(if else | select case | while )
Select ... CASE 实例
DECLARE @iRet INT, @PKDisp VARCHAR(20)
SET @iRet = '1'
Select @iRet = 
CASE
WHEN @PKDisp = '一' THEN 1
WHEN @PKDisp = '二' THEN 2
WHEN @PKDisp = '三' THEN 3
WHEN @PKDisp = '四' THEN 4
WHEN @PKDisp = '五' THEN 5
ELSE 100
END

四、存储过程格式

创建存储过程
Create Proc dbo.存储过程名
存储过程参数
AS
执行语句
RETURN
执行存储过程
GO
*********************************************************/ 
-- 变量的声明,sql里面声明变量时必须在变量前加@符号
DECLARE @I INT

-- 变量的赋值,变量赋值时变量前必须加set
SET @I = 30

-- 声明多个变量
DECLARE @s varchar(10),@a INT

-- Sql 里if语句
IF 条件 BEGIN
执行语句
END
ELSE BEGIN
执行语句
END

DECLARE @d INT
set @d = 1

IF @d = 1 BEGIN

-- 打印
PRINT '正确'
END
ELSE BEGIN
PRINT '错误'
END

-- Sql 里的多条件选择语句.
DECLARE @iRet INT, @PKDisp VARCHAR(20)
SET @iRet = 1
Select @iRet =
CASE
WHEN @PKDisp = '一' THEN 1
WHEN @PKDisp = '二' THEN 2
WHEN @PKDisp = '三' THEN 3
WHEN @PKDisp = '四' THEN 4
WHEN @PKDisp = '五' THEN 5
ELSE 100
END

-- 循环语句
WHILE 条件 BEGIN 
执行语句
END

DECLARE @i INT
SET @i = 1
WHILE @i<1000000 BEGIN
set @i=@i+1
END
-- 打印
PRINT @i

-- TRUNCATE 删除表中的所有行,而不记录单个行删除操作,不能带条件

/*
TRUNCATE TABLE 在功能上与不带 Where 子句的 Delete 语句相同:二者均删除表中的全部行

。但 TRUNCATE TABLE 比 Delete 速度快,且使用的系统和事务日志资源少。
Delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过

释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用

的计数值重置为该列的种子。如果想保留标识计数值,请改用 Delete。如果要删除表定义及其数据,请

使用 Drop TABLE 语句。
对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 Where 子句的

Delete 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。
TRUNCATE TABLE 不能用于参与了索引视图的表。
示例
下例删除 authors 表中的所有数据。*/

TRUNCATE TABLE authors

-- Select INTO 从一个查询的计算结果中创建一个新表。 数据并不返回给客户端,这一点和普通的
-- Select 不同。 新表的字段具有和 Select 的输出字段相关联(相同)的名字和数据类型。

select * into NewTable
from Uname

-- Insert INTO Select
-- 表ABC必须存在
-- 把表Uname里面的字段Username复制到表ABC
Insert INTO ABC Select Username FROM Uname

-- 创建临时表
Create TABLE #temp(
UID int identity(1, 1) PRIMARY KEY,
UserName varchar(16),
Pwd varchar(50),
Age smallint,
Sex varchar(6)
)
-- 打开临时表
Select * from #temp

-- 存储过程
-- 要创建存储过程的数据库
Use Test
-- 判断要创建的存储过程名是否存在
if Exists(Select name From sysobjects Where name='csp_AddInfo' And

type='P')
-- 删除存储过程
Drop Procedure dbo.csp_AddInfo
Go

-- 创建存储过程
Create Proc dbo.csp_AddInfo
-- 存储过程参数
@UserName varchar(16),
@Pwd varchar(50),
@Age smallint,
@Sex varchar(6)
AS
-- 存储过程语句体
insert into Uname (UserName,Pwd,Age,Sex)
values (@UserName,@Pwd,@Age,@Sex)
RETURN
-- 执行
GO

-- 执行存储过程
EXEC csp_AddInfo 'Junn.A','123456',20,'男'

@@ROWCOUNT (Transact-SQL)

返回受上一语句影响的行数。如果行数大于 20 亿,请使用 ROWCOUNT_BIG。

@@TRANCOUNT (Transact-SQL)

返回在当前连接上已发生的 BEGIN TRANSACTION 语句的数目。

注释

BEGIN TRANSACTION 语句将 @@TRANCOUNT 增加 1。ROLLBACK TRANSACTION 将 @@TRANCOUNT 递减到 0,但 ROLLBACK TRANSACTION savepoint_name 除外,它不影响 @@TRANCOUNT。COMMIT TRANSACTION 或 COMMIT WORK 将 @@TRANCOUNT 递减

本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1081900

生成唯一id号解决方法相关推荐

  1. php订单怎么生成,四种PHP生成唯一订单号的方法

    这几天一直在写个人使用的用户中心,虽然期间遇到不少的问题,但还是一点点的都解决了,也从制作期间学到不少的知识,今天就说一说利用PHP生成订单单的方法. 订单号,大家都不陌生,无论从在网上购物,还是在线 ...

  2. MySQL高并发生成唯一订单号的方法

    高并发下生成唯一订单号的存储过程 这个是用mysql写的存储过程,搭配里面一张数据表使用,达到高并发情况下获得唯一订单号的目的:原理:按照一定规则生成订单号后,把订单号插入数据表后,再返回给用户,由于 ...

  3. 生成唯一id的几种方法

    生成唯一id的几种方法 生成唯一id的方式有很多,UUID,自动增长列,雪花算法,redis等等. 生成id的要求: 全局唯一 趋势递增 效率高(生成.使用.索引) 控制并发 1.雪花算法(twitt ...

  4. php给留言分配id_如何使用php生成唯一ID的4种方法

    php生成唯一ID的应用场景非常普遍,如临时缓存文件名称,临时变量,临时安全码等,uniqid()函数基于以微秒计的当前时间,生成一个唯一的 ID.由于生成唯一ID与微秒时间关联,因此ID的唯一性非常 ...

  5. 生成唯一字符串算法_面试官问:在分布式场景,生成唯一ID,你有几种方案?...

    来源:http://t.cn/RG0AW0a 说明:本文代码采用C#,重要的是理解解决方案,代码实现都是次要的. 系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结.生成I ...

  6. 游戏后台生成唯一ID

    游戏后台生成唯一ID   MMO游戏后台通常需要由大量服务器来共同承载海量玩家,虽然玩家可能分布在不同的游戏大区,但是他们可能会通过跨服等等方式进行各种交互.游戏中的角色,装备,物品等需要生成一个全局 ...

  7. Java生成唯一id的几种方式(已验证)

    1.数据库自增序列方式 数据库方式比较简单,比如oracle可以用序列生成id,Mysql中的AUTO_INCREMENT等,这样可以生成唯一的ID,性能和稳定性依赖于数据库!如mysql主键递增: ...

  8. oracle数据库重建em,oracle 11g em重建报唯一约束错误解决方法

    oracle 11g em重建报唯一约束错误解决方法 更新时间:2012年11月27日 15:07:33   作者: 今天在手工配置Oracle11g的EM时总是报如下错误,也没有找到解决办法,以下是 ...

  9. Maven CXF wsdl2Java ListXxx生成ArrayOfXxx包装对象 解决方法

    Maven CXF wsdl2Java List<Xxx>生成ArrayOfXxx包装对象 解决方法 添加-xjc-Xxew解决,同时还要给插件添加相应的jar包,如下: <plug ...

最新文章

  1. 手机贷服务器维护升级,手机贷服务器升级
  2. 【青少年编程】【Scratch】10 画笔模块
  3. python画树叶-Python_Turtle库画一只派大星
  4. Dynamics CRM中跨域调用Web API 2
  5. 拒绝不靠谱的需求:怎样确定需求才是正确的?
  6. 《系统集成项目管理工程师》必背100个知识点-21监控项目工作ITTO
  7. Go性能测试benchmark
  8. 第二个mysql怎么装_Linux下安装两个MySQL的方法
  9. java继承总结_JAVA笔记:Java中的继承总结
  10. eigen库安装_Python-OpenCV 1. 图像处理库OpenCV安装
  11. HTML5游戏开发系列教程5(译)
  12. 二级MYSQL的语法整理_MySQL 常用命令及语法整理
  13. Sensei for Mac(系统优化清理工具)
  14. Java面经总结(2020/10.20~11.20)
  15. 卷宗怎么做_卷宗怎么读
  16. Python得到前面12个月的数据
  17. Leetcode 208、实现Trie(前缀树)
  18. TCP/IP与OSI
  19. web前端设计a half链接使用
  20. 面试笔试杂项积累-leetcode 6-10

热门文章

  1. 三维重建:三维空间中平面的旋转公式
  2. 安卓项目中文件夹的作用
  3. python变量后面加星号_Python开发中关于参数使用的几点建议 -- 1
  4. Linux macos 常用终端操作
  5. 微信应用号(小程序)资源汇总(1010更新)
  6. SQL Server2008存储结构之聚集索引
  7. 注意职场“十不要”,让你少奋斗30年
  8. xfce的panel不显示无线网络解决方案
  9. xfce中仿gnome的多桌面的xfdashboard的用法
  10. Type EnumTypeInfo<xxxxx> cannot be used as key. Contained UNSUPPORTED key types: EnumTypeInfo<xxxxx>