首页 技术 正文
技术 2022年11月15日
0 收藏 565 点赞 2,505 浏览 3420 个字

1 创建MaxIdProcess表,由于存储ID的最大值

CREATE TABLE [dbo].[MaxIdProcess](
[Id] [bigint] IDENTITY(1,1) NOT NULL, --自增ID
[TableNM] [nvarchar](200) NOT NULL, --存储表明
[Prefix] [nvarchar](50) NULL, --ID前缀
[Radix] [char](2) NULL, --
[MaxId] [nvarchar](50) NULL, --存储最大ID
[CreateDatetime] [datetime] NULL, --创建时间
[LastModifyDatetime] [datetime] NULL,
[LastModifyBy] [nvarchar](50) NULL,
CONSTRAINT [PK_MaxIdProcess] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

2、创建存储过程 Pro_GetTableNextMaxIdByTableName 获取最大ID

 CREATE procedure [dbo].[Pro_GetTableNextMaxIdByTableName]
@TableName char(50), --table名称
@Prefix char(3), --ID前缀
@NextId char(16) out --ID输出
AS begin
--if not exists (select * from MaxIdProcess where TableName=@TableName)
--begin
-- insert into MaxIdProcess values(@TableName,null)
--end
-- update MaxIdProcess
-- set @NextId= isnull(MaxId, @Prefix + '0000000000001'),
-- MaxId = dbo.Fun_GetMaxId(MaxId,@Prefix)
-- where TableName=@TableName --检查系统表中是否存在该表,如果不存在则调用Pro_GetRandomStr存储过程获取一个随机ID
IF EXISTS (SELECT object_id FROM sys.objects(nolock) WHERE type='U' AND name=@TableName)
BEGIN
EXEC Pro_GetRandomStr @NextId output
RETURN
END --检查MaxIdProcess表中是否存有需要获取ID的表名,如果不存在则插入数据
if not exists (select * from MaxIdProcess where TableNM=rtrim(@TableName))
begin
insert into MaxIdProcess values(@TableName,@Prefix,'',0,getdate(),getdate(),'Auto')
end declare @temp bigint
update MaxIdProcess
set @temp=cast(rtrim(MaxId) as bigint),MaxId=MaxId+1
where rtrim(TableNM)=rtrim(@TableName)
set @NextId=@Prefix+right(cast(1000000000000000+@temp as nvarchar(16)),13)
end

3、创建执行存储过程,如插入新增用户

CREATE PROCEDURE [dbo].[Pro_User_Insert]
@UserId CHAR(16) OUT ,
@UserNM NVARCHAR(50) ,
@Description NVARCHAR(255)
ASBEGIN TRY
BEGIN
DECLARE @Name NVARCHAR(50);
SELECT @UserId = UsersTb.UserId ,
@Name = UsersTb.Description
FROM dbo.UsersTb
WHERE UsersTb.UserNM = @UserNM;
IF NOT ISNULL(@UserId, '') = ''
BEGIN
SELECT @UserNM + @Name + '已经存在';
--SELECT '用户已经存在';
RETURN;
END;
DECLARE @MaxId CHAR(16);
EXEC dbo.GetTableNextMaxIdByTableName 'User', 'Usr', @MaxId OUT;
SET @UserId = @MaxId; INSERT INTO UsersTb
(
[UserId] ,
[UserNM] ,
[Description]
)
VALUES
(
@UserId ,
@UserNM,
@Description
);
SELECT '执行成功';
END
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE();
END CATCH

4、执行新增用户存储过程

DECLARE @UserId int;
EXEC Pro_User_Insert @UserId output,'zhangsan','张三' ;

5、完成

关于 Pro_GetRandomStr 存储过程

CREATE Procedure [dbo].[Pro_GetRandomStr]
@RandomStr varchar(16) output
as
BEGIN
set nocount on declare @s varchar(61)
declare @r varchar(16)
declare @pos int
declare @len int
set @s = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345678'
set @len = len(@s);
set @r = ''
while len(@r) < 16
begin
set @pos = cast(rand()*61 as int);
--while @pos > @len or @pos <1
--begin
-- if(@pos < 1)
-- set @pos = cast(rand()*61 as int);
-- else
-- set @pos = cast(@pos /2 as int);
--end
set @r = @r + substring(@s, @pos, 1)
--select @r
end
set @RandomStr = upper(@r)
END

c# 实现存储过程

string strcon = "Data Source=(local)\\SQLEXPRESS; Initial Catalog=TestDatabase; ";
strcon += "Integrated Security=True;";
using (SqlConnection con = new SqlConnection(strcon))
{
con.Open();
SqlParameter[] parameters =
{
new SqlParameter("@UserId", SqlDbType.Char,),
new SqlParameter("@UserNM", SqlDbType.NVarChar),
new SqlParameter("@Description", SqlDbType.NVarChar),
}; //parameters[0].Value = null;
parameters[].Direction = ParameterDirection.Output;
parameters[].Value = "zhangsan";
parameters[].Value = "张三"; SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "Pro_User_Insert";
cmd.Connection = con;
cmd.Parameters.AddRange(parameters);
object obj = cmd.ExecuteScalar();
//string msg = cmd.ExecuteScalar().ToString();
con.Close(); }
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,564
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,412
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,185
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905