关于列的IDENTITY性质的问题~~~~请帮忙

heart7580 2002-10-10 01:29:48
我看到一个存储过程中有这样的语句
SET IDENTITY_INSERT #DS ON

BEGIN TRAN
INSERT #DS(AT_ID,SE, ........)
VALUES(@AID,1,..........)
ROLLBACK

SET IDENTITY_INSERT #DS OFF

其中#DS.AT_ID列定义为IDENTITY性质,我感觉好像是上一语句没做任何动作,不知是什么用呢?是不是和改变IDENTITY列的值有关呢?关于IDENTITY的性质可以说一些吗~~~请指教~~~
...全文
43 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
heart7580 2002-10-14
  • 打赏
  • 举报
回复
非常感谢~~~~!!!
SE1 2002-10-12
  • 打赏
  • 举报
回复
是的,sybase内部维护了一个indentity列的基值。上面的事务虽然对数据库中的数据没有任何各改变:insert完就回滚了,但是,如果insert成功(尽管后来这个insert被回滚了),sybase就自动对indentity列的基值进行了维护,与此事务是否完成或回滚无关。
因此,虽然上述事务对数据没有改变,但如果@AID的值大于插入前sybase内部维护的indentity列的基值,则系统将自动改变indentity列的基值。
heart7580 2002-10-10
  • 打赏
  • 举报
回复
谢谢指教~~

同时,我的感觉是上一个事务好像是没起到作用啊,insert完就回滚了~~~我的理解是事务回滚后,indentity列的基值就变了,可以自动记忆啊~不知我的理解对不对啊
SE1 2002-10-10
  • 打赏
  • 举报
回复
是的,正常情况下如果一列被定义为IDENTITY性质,则不能显式(或直接)地赋值,例如INSERT #DS(AT_ID,SE, ........) VALUES(@AID,1,..........)是不行的。
不过,如果先设置SET IDENTITY_INSERT #DS ON,那么就可以对#DS表中的IDENTITY性质的列(这里是AT_ID)赋值了,如INSERT #DS(AT_ID,SE, ........) VALUES(@AID,1,..........)

2,598

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧