新足迹

 找回密码
 注册

精华好帖回顾

· 参加活动 - 最想念的年货 - 福州鱼丸 (2015-2-9) daniello · 新足迹厨艺大展示 12月下:主料鸡块 ——香喷喷的糯米鸡(上PP了)加做法了 (2008-12-15) 云淡风轻
· the Basin - Ku-ring-gai Chase NP - 游泳和露营的好去处 (18楼真人秀) (2007-12-3) patrickzhu · 周末随笔 - Adelaide (2008-9-16) pangpang
Advertisement
Advertisement
查看: 1663|回复: 13

请教 SQL insert 的一个问题 [复制链接]

发表于 2012-7-25 10:12 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
SQL 2008 logon trigger
我们有一个trigger 来保护SQL login
如果对方不在我们预先定义的map里,不许logon到数据库,哪怕用户名密码是对

现在运行正常,唯一的问题是,想把非正常登录事件记录下来不成功
insert into logtable....
If @@rowcount > 0
begin
Raiseerror(....)
Rollback
End

以上raiseerror/ roolback正常
但logtable里无数据
可见insert已经成功提交到log了,但log 没搞完或者没apply到数据页面
有什么办法确保insert数据成功?(就算已经退出).
有点async的意思
Advertisement
Advertisement

发表于 2012-7-25 10:22 |显示全部楼层
此文章由 北风 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 北风 所有!转贴必须注明作者、出处和本声明,并保持内容完整
insert into logtable....这里的具体内容?
这里的rollback是什么

发表于 2012-7-25 10:30 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
rollback 把insert 到logtable中的东西也一并rollback了?

发表于 2012-7-25 10:52 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
insert into 只是values,时间/ip地址/login name等
Rollback的本意是终止登录进程,难道把insert也rollback了?
检查数据库log发现有个消息是transaction abort, 应该是指终止insert

[ 本帖最后由 典 于 2012-7-25 09:55 编辑 ]

发表于 2012-7-25 10:53 |显示全部楼层

回复 典 4# 帖子

此文章由 pretty 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 pretty 所有!转贴必须注明作者、出处和本声明,并保持内容完整
晕啊。Rollback怎么会只是终止进程啊

发表于 2012-7-25 10:59 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
如果这样的话就没有办法记录下来了,因为rollback是一定要用的
就这么着了,反正raiseerror已经做了一次记录了
Advertisement
Advertisement

发表于 2012-7-25 11:01 |显示全部楼层
此文章由 pretty 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 pretty 所有!转贴必须注明作者、出处和本声明,并保持内容完整
USE tempdb;
GO
CREATE TABLE ValueTable ([value] int;)
GO

DECLARE @TransactionName varchar(20) = 'Transaction1';

--The following statements start a named transaction,
--insert two rows, and then roll back
--the transaction named in the variable @TransactionName.
--Another statement outside of the named transaction inserts two rows.
--The query returns the results of the previous statements.

BEGIN TRAN @TransactionName
       INSERT INTO ValueTable VALUES(1), (2);
ROLLBACK TRAN @TransactionName;


INSERT INTO ValueTable VALUES(3),(4);

SELECT [value] FROM ValueTable;

DROP TABLE ValueTable;

--Results
--value
-------------
--3
--4

你用这个把要rollback的transaction明确一下试试看?
要快乐,要开朗,要坚韧,要温暖。

发表于 2012-7-25 11:04 |显示全部楼层
此文章由 Ausbear 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Ausbear 所有!转贴必须注明作者、出处和本声明,并保持内容完整
哈哈哈哈,笑死我了

发表于 2012-7-25 11:04 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 pretty 于 2012-7-25 09:53 发表
晕啊。Rollback怎么会只是终止进程啊


因为这不是普通的stored proc
是logon trigger,有些专有的东西,误以为rollback是专门用来终止登录的. 不管怎样这个rollback 和stored proc里的rollback 应该有不同之处。也许是我的误解

发表于 2012-7-25 11:25 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
找到ms的说明了,rollback不仅取消了本trigger里的数据操作
还会取消其它trigger里的数据操作
Rollback 以后的操作则不会被取消
试试把insert放在rollback 后

[ 本帖最后由 典 于 2012-7-25 10:29 编辑 ]

发表于 2012-7-25 11:39 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
把insert放rollback后成功了
非法登录者被终止登录并收到消息
事件也被记录下来了

评分

参与人数 1积分 +3 收起 理由
无视 + 3 感谢分享

查看全部评分

Advertisement
Advertisement
头像被屏蔽

禁止访问

发表于 2012-7-25 23:14 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 于 2012-7-25 10:39 发表
把insert放rollback后成功了
非法登录者被终止登录并收到消息
事件也被记录下来了


靠。 我还以为有什么玄妙的地方。

发表于 2012-7-25 23:34 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 atransformer 于 2012-7-25 22:14 发表


靠。 我还以为有什么玄妙的地方。

惭愧了
因为说明里强调用rollback就终止了用户进程,就以为跟rollback transaction 没关系
没想到具有双重功能
头像被屏蔽

禁止访问

发表于 2012-7-25 23:40 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 于 2012-7-25 22:34 发表

惭愧了
因为说明里强调用rollback就终止了用户进程,就以为跟rollback transaction 没关系
没想到具有双重功能


被我蒙了。 我其实完全没看懂。。。。

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部