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

推荐订阅源

N
Netflix TechBlog - Medium
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
博客园_首页
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog
V
Visual Studio Blog
The Cloudflare Blog
罗磊的独立博客
美团技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
博客园 - 叶小钗
The GitHub Blog
The GitHub Blog
Last Week in AI
Last Week in AI
J
Java Code Geeks
MyScale Blog
MyScale Blog
G
Google Developers Blog
U
Unit 42
Y
Y Combinator Blog
P
Proofpoint News Feed
Vercel News
Vercel News

博客园 - 彭浩

[导入][转载][收藏][新]正则表达式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