日期:2014-05-18  浏览次数:20527 次

|M| 一条比较复杂的触发器 鱼兄和大家来看看  200分复杂的触发器
今天有几天很复杂的触发器要写
因为触发器我很菜   希望大家多帮忙  
现在先说第一条  
如我有表
User  
ID     Name   Age   Address         Tel
2       小王   21     广州越秀       020-8731****
112   小李   24     广州天河北   020-35684***

生成的短信表表
SMS
ID   UserID   Connect                          Send
1               2   小王,在我们的网站的ID号为00002,今年21岁,所在地广                   0
2               2   州越秀,电话是020-8731****                                                                   0
3           112   小李,在我们的网站的ID叼为00112,年年24岁,所在地广                   0
4           112   州天河北,电话是020-35684***                                                               0
-----------------------------
具体说明
这是一条用户注册的时候自动给用户发送短信的功能的触发器
首先根据记录生成一条字符串,
但因为短信最大为70个汉字,我上面是以30个以准
如果字符串长的话就得把他们按30个字符串进行拆分
然后将他们添加到SMS这个表中
添加的时候要求是一起添加的
比如记录1和记录2   他们都为UserID   2
如果有一条添加不成功的话就全都不添加

在User表的inserted中要怎么来写

谢谢 急


------解决方案--------------------
添加事务判断
------解决方案--------------------
关注
------解决方案--------------------
if object_id( 'tbUser ') is not null
drop table tbUser
if object_id( 'tbSMS ') is not null
drop table tbSMS
GO
create table tbUser(ID int,Name varchar(10), Age int, Address varchar(20),Tel varchar(20))
create table tbSMS(ID int identity(1,1), UserID int, Connect varchar(70),Send bit)
GO
create trigger trg_insert_tbUser on tbUser
for insert
as
declare @id int,@str varchar(1000)
set @str = ' '
select @id = ID, @str = Name +
',在我们的网站的ID号为 ' + right(100000 + @id,5) + ',今年 ' +
rtrim(Age) + '岁,所在地 ' + Address + ',电话是 ' + Tel
from inserted
BEGIN TRANSACTION
if len(@str) <= 30
insert tbSMS (UserID,Connect) select @id,@str
IF @@error <> 0
ROLLBACK
else
begin
insert tbSMS (UserID,Connect,Send) select @id,substring(@str,1,30),0
IF @@error <> 0
ROLLBACK
insert tbSMS (UserID,Connect,Send) select @id,substring(@str,31,40),0
IF @@error <> 0
ROLLBACK
end
IF @@trancount > 0
COMMIT
GO

----测试
insert tbUser select 2, '小王 ', 21, '广州越秀 ', '020-8731**** '
insert tbUser select 112, '小李 ', 24, '广州天河北 ', '020-35684*** '
----查看
SELECT * FROM tbSMS

----清除测试环境
drop table tbUser,tbSMS

/*结果
ID UserID Connect Send
--------------------------------
1 2 小王,在我们的网站的ID号为00002,今年21岁,所在地广 0
2 2 州越秀,电话是020-8731**** 0
3 112 小李,在我们的网站的ID号为00112,今年24岁,所在地广 0