惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
WordPress大学
WordPress大学
C
Check Point Blog
GbyAI
GbyAI
U
Unit 42
Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
Blog — PlanetScale
Blog — PlanetScale
J
Java Code Geeks
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Hugging Face - Blog
Hugging Face - Blog
Vercel News
Vercel News
博客园 - 【当耐特】
美团技术团队
小众软件
小众软件
S
SegmentFault 最新的问题
Jina AI
Jina AI
阮一峰的网络日志
阮一峰的网络日志
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The Cloudflare Blog
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog

博客园 - 彭浩

[导入][转载][收藏][新]正则表达式30分钟入门教程[2007-8-3 V2.21] [导入].NET 2.0中,配置文件app.config的读写(VS2005,C#) [导入]如何进入程序设计的领域 [导入]用ASP设计购物推车 [导入]XHTML 1.0 参考 [导入]JS代码--HTML自动转为JS代码 [导入]文本输入限制 [导入]JS代码--选择日期 [导入]JS代码--Checkbox控制输入框 [导入]小本创业者的致胜法宝! [导入]五种提高 SQL 性能的方法 [导入]等了好几天宽带也算是开通了。。。但却发现铁通的宽带不能用BT了!!! [导入]ASP+Access数据库的终极安全大法18则(原创) [导入] [ASP.NET] Session 详解 [导入]Asp.NET常用函数 [导入]Jmail发信函数 [导入]非洲捕蟒全过程(组图) [导入]今天在试着装VS.NET2005了---Visual Studio 2005 Beta2 简体中文版发布,中文论坛开通 [导入]vbscript错误代码及对应解释大全/VBScript 语法错误
[导入]获取表中新记录(下一条记录)的主键值的存储过程
彭浩 · 2006-11-06 · via 博客园 - 彭浩

在项目中如果数据库表中主键不是使用的自动生成的标识列时
许多表中都需要获取新记录的主键值,每次都需要连接数据库并计算,
所以写了个能适应不同表的存储过程,以及可定义主键前缀及默认长度

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO/*
获得表中新的主键值
调用方法:
    DECLARE @NewId VARCHAR(20)
    EXEC GetNewID 'Customer','CustId','C', 4, @NewId OUT
    SELECT @NewId        
输入参数:
    @TableName 表名
    @KeyName 主键名
    @Prefix 主键前缀
    @Length 表中无数据时的默认长度
输出参数:
    @NewId 返回的新主键值
*/ALTER  PROCEDURE GetNewID
(
    
@TableName NVARCHAR(100),
    
@KeyName NVARCHAR(100),
    
@Prefix NVARCHAR(10),
    
@Length INT,
    
@NewId NVARCHAR(20) OUT
)
AS
BEGIN
SET NOCOUNT ON
    
DECLARE @MaxId VARCHAR(20)
    
DECLARE @Fill NVARCHAR(20)
    
--DECLARE    @NewId VARCHAR(20)
    DECLARE @SQL NVARCHAR(1000)
    
    
IF ((@Prefix IS NULL))
        
SET @Prefix = ''
        
    
SET @Fill = '00000000000000000000'
    
SET @SQL = N'SELECT @MaxId = ISNULL(RTRIM(LTRIM(MAX(' + @KeyName + '))), ''' + LEFT(@Prefix + @Fill@Length+ ''') FROM [' + @TableName + ']'
    
EXEC sp_executesql @SQL,N'@MaxId VARCHAR(20) OUT',@MaxId OUT
 
    
--PRINT 'OUT:'+@MaxId        
    SET @NewId = @Prefix + RIGHT(@Fill + CAST( (RIGHT(@MaxId,LEN(@MaxId)-LEN(@Prefix))+1AS NVARCHAR ), LEN(@MaxId)-LEN(@Prefix))
    
--SELECT @NewId
SET NOCOUNT OFF
ENDGO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

文章来源:http://www.cnblogs.com/Dove/archive/2006/11/06/552035.html