触发器执行了 可是更新失败了,请高手看看问题出在哪里?

wang520d 2008-09-26 01:43:44
触发器作用的表的脚本:

CREATE TABLE [dbo].[T_Guest_Info](
[Mustid] [int] IDENTITY(1,1) NOT NULL,
[TotalMoney] [decimal](18, 2) NULL CONSTRAINT [DF_T_Guest_Info_TotalMoney] DEFAULT ((0)),
[Integral] [decimal](18, 2) NULL CONSTRAINT [DF_T_Guest_Info_Integral] DEFAULT ((0)),
[ChangeSo] [nvarchar](150) NULL,
[GID] [nvarchar](50) NOT NULL,
[Mobile] [nvarchar](50) NULL,
[AddressTel] [nvarchar](50) NULL,
[StandbyTel] [nvarchar](50) NULL,
[Name] [nvarchar](50) NULL,
[age] [nvarchar](50) NULL,
[Sex] [varchar](50) NULL,
[Province] [nvarchar](50) NULL,
[City] [nvarchar](50) NULL,
[Area] [nvarchar](50) NULL,
[Address] [nvarchar](50) NULL,
[ArrivedCode] [varchar](50) NULL,
[Postalcode] [varchar](50) NULL,
[Remarks] [nvarchar](50) NULL,
[IsSell] [varchar](50) NULL CONSTRAINT [DF_T_Guest_Info_IsSell] DEFAULT ('no'),
[GType] [nvarchar](50) NULL CONSTRAINT [DF_T_Guest_Info_GType] DEFAULT ((1)),
[GStatus] [nvarchar](50) NULL,
[GStage] [nvarchar](50) NULL,
[GKind] [nvarchar](50) NULL,
[RegTime] [datetime] NULL CONSTRAINT [DF_T_Guest_Info_RegTime] DEFAULT (getdate()),
[IsDel] [varchar](50) NULL CONSTRAINT [DF_T_Guest_Info_IsDel] DEFAULT ('no'),
[PerfectTime] [datetime] NULL,
[Operate] [nvarchar](50) NULL,
[AssignHits] [int] NULL CONSTRAINT [DF_T_Guest_Info_AssignHits] DEFAULT ((0)),
[ChangePeople] [nvarchar](50) NULL,
[IsAssign] [varchar](50) NULL CONSTRAINT [DF_T_Guest_Info_IsAssign] DEFAULT ((0)),
[MCGroup] [nvarchar](50) NULL
) ON [PRIMARY]

GO


我的触发器脚本:

create TRIGGER [dbo].[T_GuestIntegralChange_Log]
ON [dbo].[T_Guest_Info]
FOR UPDATE
AS
--IF COLUMNS_UPDATED() & 10 <10 AND COLUMNS_UPDATED() & 10>0
IF (SUBSTRING(COLUMNS_UPDATED(),1,1)&14)>0--/*记录表的2,3,4列的数据变更*/
BEGIN
/*保存旧的信息*/
INSERT INTO [HXRTDB].[dbo].[T_GuestIntegral_Log]
([GID],
[TotalMoneyOld]
,[TotalIntegralOld]
,[ChangeSoOld]
,[ChangePeopleOld])
SELECT
[GID],
[TotalMoney]
,[Integral]
,[ChangeSo]
,[ChangePeople]
FROM deleted

/*保存新的信息*/
UPDATE [HXRTDB].[dbo].[T_GuestIntegral_Log]
SET
[GID] = (SELECT GID FROM inserted),
--,[TotalMoneyOld] = <TotalMoneyOld, decimal(18,2),>
[TotalMoneyNew] = (SELECT [TotalMoney] FROM inserted)
--,[TotalIntegralOld] = <TotalIntegralOld, decimal(18,2),>
,[TotalIntegralNew] = (SELECT [Integral] FROM inserted)
,[ChangeSoNew] = (SELECT [ChangeSo] FROM inserted)
,[ChangePeopleNew] = (SELECT [ChangePeople] FROM inserted)
WHERE
MUSTID =(SELECT TOP 1 MUSTID FROM T_GuestIntegral_Log ORDER BY MUSTID DESC)
END

update t_guest_info set totalmoney='1111' where mustid ='151'

SELECT *
FROM T_GuestIntegral_Log

还有触发器影响的表的脚本 在下面接着贴出来:

CREATE TABLE [dbo].[T_GuestIntegral_Log](
[Mustid] [int] IDENTITY(1,1) NOT NULL,
[GID] [nvarchar](50) NULL,
[TotalMoneyOld] [decimal](18, 2) NULL,
[TotalMoneyNew] [decimal](18, 2) NULL,
[TotalIntegralOld] [decimal](18, 2) NULL,
[TotalIntegralNew] [decimal](18, 2) NULL,
[ChangeSoOld] [nvarchar](150) NULL,
[ChangeSoNew] [nvarchar](150) NULL,
[ChangePeopleOld] [nvarchar](50) NULL,
[ChangePeopleNew] [nvarchar](50) NULL,
CONSTRAINT [PK_T_GuestIntegra_Log] PRIMARY KEY CLUSTERED
(
[Mustid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
...全文
229 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang520d 2008-09-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dobear_0922 的回复:]
引用 7 楼 wang520d 的回复:
引用 6 楼 dobear_0922 的回复:
SQL codeIF (SUBSTRING(COLUMNS_UPDATED(),1,1)&14)>0--/*记录表的2,3,4列的数据变更*/
---->
IF (SUBSTRING(COLUMNS_UPDATED(),4,1)&30)>0 --因为你的表有31列,会有四个字节,2,3,4,5列加起来是30


2、3、4、5加起来是30 怎么出来的?


power(2,(2-1)) + power(2,(3-1)) + power(2,(4-1)) + power(2,(5-1))
=2+4+8+16=30
[/Quote]

====谢谢,,结贴
dobear_0922 2008-09-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wang520d 的回复:]
引用 6 楼 dobear_0922 的回复:
SQL codeIF (SUBSTRING(COLUMNS_UPDATED(),1,1)&14)>0--/*记录表的2,3,4列的数据变更*/
---->
IF (SUBSTRING(COLUMNS_UPDATED(),4,1)&30)>0 --因为你的表有31列,会有四个字节,2,3,4,5列加起来是30


2、3、4、5加起来是30 怎么出来的?
[/Quote]

power(2,(2-1)) + power(2,(3-1)) + power(2,(4-1)) + power(2,(5-1))
=2+4+8+16=30
dobear_0922 2008-09-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wang520d 的回复:]
引用 6 楼 dobear_0922 的回复:
SQL codeIF (SUBSTRING(COLUMNS_UPDATED(),1,1)&14)>0--/*记录表的2,3,4列的数据变更*/
---->
IF (SUBSTRING(COLUMNS_UPDATED(),4,1)&30)>0 --因为你的表有31列,会有四个字节,2,3,4,5列加起来是30


2、3、4、5加起来是30 怎么出来的?
[/Quote]

power(2,(2-1)) + power(2,(3-1)) + power(2,(4-1)) + power(2,(5-1))
=2+4+8+16=30
wang520d 2008-09-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dobear_0922 的回复:]
SQL codeIF (SUBSTRING(COLUMNS_UPDATED(),1,1)&14)>0--/*记录表的2,3,4列的数据变更*/
---->
IF (SUBSTRING(COLUMNS_UPDATED(),4,1)&30)>0 --因为你的表有31列,会有四个字节,2,3,4,5列加起来是30
[/Quote]

2、3、4、5加起来是30 怎么出来的?
dobear_0922 2008-09-26
  • 打赏
  • 举报
回复
IF (SUBSTRING(COLUMNS_UPDATED(),1,1)&14)>0--/*记录表的2,3,4列的数据变更*/
---->
IF (SUBSTRING(COLUMNS_UPDATED(),4,1)&30)>0 --因为你的表有31列,会有四个字节,2,3,4,5列加起来是30
-狙击手- 2008-09-26
  • 打赏
  • 举报
回复
2、3、4、5

--

power(2,(2-1)) + power(2,(3-1)) + power(2,(4-1)) + power(2,(5-1)) +
nvrenchenling 2008-09-26
  • 打赏
  • 举报
回复
我没有耐心看你的程序,但是,触发器也有好几种啊!
insert触发、update触发
我看你的情况,比较适合update触发
dobear_0922 2008-09-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wang520d 的回复:]
其实说白了 我就是想做一个触发器影响表的2、3、4、5列 只要有其中一列发生改变我就执行一个触发器;
这个触发器能往表T_GuestIntegral_Log插入更新前后的数据
[/Quote]

IF (SUBSTRING(COLUMNS_UPDATED(),1,1)&14)>0--/*记录表的2,3,4列的数据变更*/
---->
IF COLUMNS_UPDATED() & 14 > 0
Sniper_Killer 2008-09-26
  • 打赏
  • 举报
回复
keep in focus,wait.
wang520d 2008-09-26
  • 打赏
  • 举报
回复
其实说白了 我就是想做一个触发器影响表的2、3、4、5列 只要有其中一列发生改变我就执行一个触发器;
这个触发器能往表T_GuestIntegral_Log插入更新前后的数据

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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