存储过程的编写

来源:百度知道 编辑:UC知道 时间:2024/06/11 02:02:01
在学习存储过程的编写
但是输出的格式和需求的理解上有一定的问题
望前辈们指导 谢谢

给出具体例子
存储过程
名称:收件箱
要求:得到用户的收件箱(也可以得到我的收藏),(“参数:用户,取收藏记录否,条件字符串(默认1=1)”)括号内不知道怎么理解 是不是收藏记录是否 也做为一个参数 条件字符串(默认1=1)怎么理解

有关表
T_Mail_User
名称 代码 数据类型 主要的 默认值 注释
id id numeric TRUE
邮件实例id MailId numeric FALSE
用户id UserId numeric FALSE
已读标志 IsRead int FALSE 0
删除标志 IsDelete int FALSE 0
邮箱类别 MailType int FALSE 4
是否收藏 IsFavorite int FALSE 0

T_Mail
名称 代码 数据类型 主要的 默认值 注释
id id numeric TRUE
主题 Title nvarchar(200) FALSE
内容 Content ntext FALSE
发送至 SendTo nvarchar(800) FALSE
抄送至 CopyTo nvarchar(800) FALSE
密送至 PrivateTo nvarchar(800) FALSE
全部邮送 AllTo nvarchar(800) FALSE
删除标志 IsDelete int FALSE 0
发送日期 SendDate datetime FALSE
发送人 UserId numeric FALSE
提示否 IsPrompt int FALSE 0
短信提示否 IsNote int FALSE 0
附件 Affix nvarchar(800) FALSE 逗号分隔

麻烦给出收件箱这个存储过程的

我是这样理解的:
1、要求根据UserId,查T_Mail_User表,得到MailId,再查T_Mail表获得邮件。
2、同时可以获得用户的收藏邮件。即不但提供UserId输入,而且提供“是否要取收藏记录”的输入参数。
3、同时支持条件查询,比如,按发送日期等查询,默认1=1,即没有条件语句。
这样,存储过程中关键的语句为
if(@filterString is null)
set @filterString='1=1'
declare cmdStr char(256)
if(isGetFavorite)
set cmdStr='select b.* from T_Mail_User a,T_Mail b
where a.isFavorite=1 and a.UserId=@userId and a.MailId=b.MailId and a.MailType=0 and '+@filterString
else
...a.isFavorite=0...
exec(cmdStr)
上面假设收件箱标识为0,如果参数化,此存储过程也可用于查用户的发件箱等。
上面的@filterString就是条件字符串,或者‘1=1’可能由前台提供,此时不必要第一个if。

看不明白这个两个表
不过括号内(默认1=1)的含义是:那个“条件判断”默认为真
“收藏记录否”,可能是指在查询时,第一个表中“是否收藏”字段要为“非”

是不是还有"我的收藏"表?
目前只能提供根据用户号返回相应的邮件
create PROCEDURE [dbo].[Pr_T_Mail_User]
(
@UserId int
)
AS
SELECT
T_Mail_User.MailId,
T_Mail_User.UserId,
T_Mail_User.IsRead,
T_Mail_User.IsDelete,
T_Mail_User.