发送消息模块数据结构
涉及表
info 消息表
Doc 文档表
Info表
列名 数据类型 长度 允许空 说明
Id Int,标识 4 主键
From Int 4 发送者
To Varchar 1000 接受者
Body ntext 16 消息正文
Title nVarchar 200 消息标题
Isdel Varchar 1000 允许 是否删除
Isview Varchar 1000 允许 是否已阅
注:
1.to字段里存放的是所有接受者的id,用英文半角逗号分隔开。
2.isdel里存放所有删除了此条消息的用户id,用英文半角逗号隔开
3.isview里存放所有已经查阅了此条消息的用户id,用英文半角逗号隔开
info表的t-sql代码
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[info]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[info]
GOCREATE TABLE [dbo].[info] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[from] [int] NOT NULL ,
[to] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[body] [text] COLLATE Chinese_PRC_CI_AS NOT NULL ,
[title] [nvarchar] (200) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[isdel] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NULL ,
[isview] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
相关存储过程
1.发送消息
/*
发送一条消息
*/
CREATE PROCEDURE [sp_insert_info]
( @from [int],
@to [varchar](1000),
@body [text],
@title [nvarchar](200)
)AS INSERT INTO [oa].[dbo].[info]
([from],
[to],
[body],
[title],
[isdel],
[isview]
)
VALUES
( @from,
@to,
@body,
@title,'',''
)
GO
示例:
exec sp_insert_info '1','2,3,4,5','哈哈,你是猪头','你是猪头'
2.查看一条消息
/*
用户删除一条消息
*/
CREATE PROCEDURE [sp_user_view_info]
( @id [int],
@isview [varchar](1000)
)AS
update [info] set isview=isview+','+@isview where id=@id
select * from [info] where id=@id
GO
示例:exec sp_user_view_info 24,'2'
3.删除一条消息
/*
用户删除一条消息
*/
CREATE PROCEDURE [sp_user_del_info]
( @id [int],
@isdel [varchar](1000)
)AS
update [info] set isdel=isdel+','+@isdel where id=@id
GO
示例:exec sp_user_del_info 24,'2'
4. 显示某个用户的消息
/*
显示某个用户的消息
*/
CREATE PROCEDURE [sp_my_info]
(
@myid [varchar](50)
)
as
select * from [info] where charindex(','+@myid+',',','+[to]+',')>0 and charindex(','+@myid+',',','+[isdel]+',')=0 order by id desc
GO
示例:exec sp_my_info '2'
5.是否有新的消息
/*
判断某人是否有新的消息
*/
CREATE PROCEDURE [sp_isnew_info]
(
@myid [varchar](50)
)
as
declare @a bit
select @a=count(*) from [info] where charindex(','+@myid+',',','+[to]+',')>0 and charindex(','+@myid+',',','+[isdel]+',')=0 and charindex(','+@myid+',',','+[isview]+',')=0
if @a=0
return 0
else
return 1GO
测试:
declare @a bit
exec @a=sp_isnew_info 2
if @a=1
PRINT '你有新的消息'
else
PRINT '你暂时没有新消息'
这是以前设计的一个库结构
涉及表
info 消息表
Doc 文档表
Info表
列名 数据类型 长度 允许空 说明
Id Int,标识 4 主键
From Int 4 发送者
To Varchar 1000 接受者
Body ntext 16 消息正文
Title nVarchar 200 消息标题
Isdel Varchar 1000 允许 是否删除
Isview Varchar 1000 允许 是否已阅
注:
1.to字段里存放的是所有接受者的id,用英文半角逗号分隔开。
2.isdel里存放所有删除了此条消息的用户id,用英文半角逗号隔开
3.isview里存放所有已经查阅了此条消息的用户id,用英文半角逗号隔开
info表的t-sql代码
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[info]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[info]
GOCREATE TABLE [dbo].[info] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[from] [int] NOT NULL ,
[to] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[body] [text] COLLATE Chinese_PRC_CI_AS NOT NULL ,
[title] [nvarchar] (200) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[isdel] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NULL ,
[isview] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
相关存储过程
1.发送消息
/*
发送一条消息
*/
CREATE PROCEDURE [sp_insert_info]
( @from [int],
@to [varchar](1000),
@body [text],
@title [nvarchar](200)
)AS INSERT INTO [oa].[dbo].[info]
([from],
[to],
[body],
[title],
[isdel],
[isview]
)
VALUES
( @from,
@to,
@body,
@title,'',''
)
GO
示例:
exec sp_insert_info '1','2,3,4,5','哈哈,你是猪头','你是猪头'
2.查看一条消息
/*
用户删除一条消息
*/
CREATE PROCEDURE [sp_user_view_info]
( @id [int],
@isview [varchar](1000)
)AS
update [info] set isview=isview+','+@isview where id=@id
select * from [info] where id=@id
GO
示例:exec sp_user_view_info 24,'2'
3.删除一条消息
/*
用户删除一条消息
*/
CREATE PROCEDURE [sp_user_del_info]
( @id [int],
@isdel [varchar](1000)
)AS
update [info] set isdel=isdel+','+@isdel where id=@id
GO
示例:exec sp_user_del_info 24,'2'
4. 显示某个用户的消息
/*
显示某个用户的消息
*/
CREATE PROCEDURE [sp_my_info]
(
@myid [varchar](50)
)
as
select * from [info] where charindex(','+@myid+',',','+[to]+',')>0 and charindex(','+@myid+',',','+[isdel]+',')=0 order by id desc
GO
示例:exec sp_my_info '2'
5.是否有新的消息
/*
判断某人是否有新的消息
*/
CREATE PROCEDURE [sp_isnew_info]
(
@myid [varchar](50)
)
as
declare @a bit
select @a=count(*) from [info] where charindex(','+@myid+',',','+[to]+',')>0 and charindex(','+@myid+',',','+[isdel]+',')=0 and charindex(','+@myid+',',','+[isview]+',')=0
if @a=0
return 0
else
return 1GO
测试:
declare @a bit
exec @a=sp_isnew_info 2
if @a=1
PRINT '你有新的消息'
else
PRINT '你暂时没有新消息'
这是以前设计的一个库结构
解决方案 »
- 想做过工资管理的朋友请教:如何实现税后实发工资是固定金额的情况?
- 急急急:VB连接数据库SQL SERVER
- 在没有安装SQL Server的机器上能否运行.sql的脚本文件?
- 请教这个语句应该怎么写?达人请进~~~
- 50分跪求~!~ 递归类型检索
- 一个数据表80个N字段,200万条数据,一组数16个,要在表中找出与这组数任意5个相同的记录,求在VFP中的算法(我只懂些VFP),谢谢!
- reporting service 无法连接数据库,请帮忙看看
- 查询:一字段有多条相同记录,查询最后一条.
- 用SQL Server 的个人版如何建立一个数据库?
- how to 导出SqlServer7.0中的数据库?
- 请教各位高手:在SQLServer的服务器端,如何通过SQL语句 更改 指定的客户端电脑的注册表信息!
- 一个字段的设置问题,求你们啦!我没有分了,对不起.
MessageId 消息内码
MessageTitle 消息标题
MessageContent消息内容
MessageDoc 消息相关文件URL
(2)消息发送者信息表: Sender
SendId 发送内码
SendStfId 发送人员内码
SendDate 发送日期
SendState 发送状态
MessageId 消息内码
发送状态有:未发送成功标志为0,已经发送成功则标记为1,放置到垃圾箱则标记为2,
已经删除标记为3,放置到已发送箱记为4(3) 消息接收则信息表:Receiver
ReceiveId 接受内码
ReceiveStfId 接受人内码
ReceiveState 接受状态
MessageId 消息内码
可以把前綴去掉。
如在MessageID改ID我認為在Message裡的ID號就是Message的ID號不必要加Message
我想這樣對以後的公用性要好一些。但是對於別的表裡的就是要去掉
如在Receiver裡的MessageID就沒有必要去掉。我修改如下:
1)消息的基本信息:Message
Id 消息内码
Title 消息标题
Content消息内容
Doc 消息相关文件URL
(2)消息发送者信息表: Sender
Id 发送内码
StfId 发送人员内码
Date 发送日期
State 发送状态
MessageId 消息内码
发送状态有:未发送成功标志为0,已经发送成功则标记为1,放置到垃圾箱则标记为2,
已经删除标记为3,放置到已发送箱记为4(3) 消息接收则信息表:Receiver
Id 接受内码
StfId 接受人内码
State 接受状态
MessageId 消息内码
我的消息表是设置在一个表中,确实有考虑欠周全的地方,比如消息是发送给多人的,但是只要有一个人打开消息的状态就变成了已阅读,不过想想我们这个系统使用者极少而且一般都是对个人的就设计到一个表中了
其他的我都是在asp中实现的而不是通过存储过程,原来的时候使用的数据库是access的