首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 添加命令时,自动返回新添记录的 uniqueidentifier值问题 [已结贴,结贴人:fivestars]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 10:49:03 楼主
    添加命令时,自动返回新添记录的 uniqueidentifier值问题,如何实现?
    自动增加命令可以用 SELECT @@IDENTITY As 'Identity' ,但是uniqueidentifier的字段,如何用SQL语句来实现,谢谢!
    40  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    发表于:2008-05-10 10:55:531楼 得分:2
    @@IDENTITY
    返回最后插入的标识值。

    语法
    @@IDENTITY

    返回类型
    numeric

    注释
    在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。

    在返回插入到表的 @@IDENTITY 列的最后一个值方面,@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 函数类似。

    @@IDENTITY 和 SCOPE_IDENTITY 将返回在当前会话的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。

    IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回任何会话和任何作用域中为特定表生成的标识值。有关更多信息,请参见 IDENT_CURRENT。

    示例
    下面的示例向带有标识列的表中插入一行,并用 @@IDENTITY 显示在新行中使用的标识值。

    INSERT INTO jobs (job_desc,min_lvl,max_lvl)
    VALUES ('Accountant',12,125)
    SELECT @@IDENTITY AS 'Identity'

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 10:57:352楼 得分:2
    定义默认值 newID()
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 10:59:003楼 得分:4
    通常情况下要获取把存储过程,和程序实现GUID
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 10:59:454楼 得分:6
    SQL code
    --要插入数据的表,包含一个uniqueidentifier字段 create table tb(nid uniqueidentifier default(newid()), name varchar(32)) --定义一个存储uniqueidentifier的表 declare @tb table(nid uniqueidentifier) --插入数据,并将uniqueidentifier字段内容存入@tb insert tb(name) output inserted.nid into @tb(nid) values('dobear') --从@tb中猎取uniqueidentifier字段的值 declare @nid uniqueidentifier select @nid=nid from @tb select @nid /* 203A98E7-2CE6-4893-888C-61AB6150D438 */ drop table tb
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 11:01:355楼 得分:6
    SQL code
    如: create table t(ID uniqueidentifier) --程序 create proc P(@ID uniqueidentifier) as insert T values(@ID) go create proc P(@ID uniqueidentifier output) as set @ID=newID() insert T values(@ID)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hackztx
    • 等级:
    发表于:2008-05-10 11:03:136楼 得分:20
    SQL code
    CREATE TABLE Test ( PKID INT IDENTITY(1,1) PRIMARY KEY , Column1 VARCHAR(50), GUID UNIQUEIDENTIFIER DEFAULT NEWID() ) INSERT INTO Test (Column1) VALUES ('abc') select @@IDENTITY SELECT GUID FROM Test Where PKID=@@IDENTITY SELECT TOP 1 GUID FROM Test ORDER BY 1 DESC
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 11:04:347楼 得分:0
    先获得GUID,再往表插入数据啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ranzj
    • 等级:
    发表于:2008-05-10 20:20:118楼 得分:0
    还要考虑语句执行失败的问题。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 10:33:159楼 得分:0
    大家的方法都不错,hackztx 的方法兼顾到了GUID和自增加ID,并且只用SQL语句,构思比较巧妙,呵呵
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved