表中有几个字段,各字段内部内容之间用逗号分割,要实现如下几个操作,求一存储过程

lovemyfattycat 2006-09-03 09:49:23

有一个数据库表,存储的是对于某条新闻,应该查看的有哪些人、还未察看的有哪些人、已经察看的有哪些人,结构如下:

ID int --表ID
NewsID int --新闻编号
Users Text --应该察看此新闻的所有人
WaitUsers Text --还未察看的有哪些人
CompUsers Text --已经察看的有哪些人
Relations int --表示Users字段所有用户之间的“与或关系”:1为“与关系”,即所有人都必须看完;0为“或关系”,即只要有任意一人看完即可
Status int --表示此新闻当前的察看状态:0为已看完,1为未看完


其中,Users、WaitUsers、CompUsers的内部,各用户名之间都是使用逗号分割的形式,如初始状态:

Users字段内容:User1,User2,User3
WaitUsers字段内容:User1,User2,User3
CompUsers字段内容为空
Relations字段内容:1(与关系)
Status字段内容:1


当User2看完此新闻后,形式变成:

Users字段内容:User1,User2,User3
WaitUsers字段内容:User1,User3
CompUsers字段内容:User2
Relations字段内容:1
Status字段内容:1


============================================


由于我的SQL语句实在很烂,总也调不出来,所以向大家求一个存储过程,实现上边例子中的功能,具体如下:(我按照逻辑顺序组织了一下)


功能点1:判断某条NewsID是否存在?
|
|
|
——————————————
存| 不|
在| 存|
| 在|
功能点2:用户之间
是否为“与关系”?
|
|
|
————————————
| |
是| 否|
| |
功能点3:WaitUser字 (完成与功能点4相同
段是否只剩User2? 的功能)
|
|
|
————————————
| |
是| 否|
| |
功能点4:将User2添加 功能点5:将User2
到CompUser中,并将 从WaitUser置到
WaitUser字段清空、将 CompUser中
Status字段置为0 且SP返回值为1
且SP返回值为0



请大家帮一下忙~~非常非常感谢~~

^o^
...全文
263 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
i9988 2006-09-03
  • 打赏
  • 举报
回复
--所有text字段应该都改为varchar

create proc pr_test
@NewsID int,
@User varchar(20)
as
if not exists ( select 1 from tablename where NewsID=@NewsID)
return -1 --返回-1表示出错

declare @r int
set @r=-1

update tablename
set @r=case when Relations=1 and WaitUsers=@User then 0 when Relations=1 and WaitUsers<>@User then 1 else 0 end,
WaitUsers=case when Relations=1 and WaitUsers=@User then null
when Relations=1 and WaitUsers<>@User then stuff(replace(','+WaitUsers,','+@User,''),1,1,'') else null end,
CompUsers=case when Relations=1 then isnull(CompUsers+',','')+@User else null end,
Status=case when Relations=1 and WaitUsers=@User then 0 when Relations=1 and WaitUsers<>@User then 1 else 0 end
where NewsID=@NewsID
and ','+Users+',' like ','+@User+','

return @r

go

--没有测试
zjcxc 元老 2006-09-03
  • 打赏
  • 举报
回复
如果你是把 Users、WaitUsers、CompUsers 这些做成单独的辅助表, 并且数据是以行的形式体现, 则处理起来就容易了.

zjcxc 元老 2006-09-03
  • 打赏
  • 举报
回复
WaitUsers Text --还未察看的有哪些人
CompUsers Text --已经察看的有哪些人

其中,Users、WaitUsers、CompUsers的内部,各用户名之间都是使用逗号分割的形式



从楼主的表设计来看, 这样的处理在sql中是没有什么效率, 而且是比较难处理的
单就要对text字段进行分割, 在2000或者以下的版本中, 是很麻烦的一件事
而且这些逗号分割的东西都要拆了才能处理, 实在是有些麻烦
fattycat 2006-09-03
  • 打赏
  • 举报
回复

请大家帮忙
【源码免费下载链接】:https://renmaiwang.cn/s/uwa75 在计算机领域中,DLL(动态链接库)文件是一种用于共享功能的资源,在Windows操作系统中被广泛使用。shell360ext.dll是与360安全卫士相关的DLL文件,主要为系统提供扩展功能。然而,在某些情况下,用户可能需要删除该DLL档案以解决冲突、感染或误删等问题。本文将深入探讨如何安全且高效地删除shell360ext.dll,并分析其可能导致的问题及应对措施。在执行删除操作前,请确保已备份重要数据并充分了解潜在风险。 为了彻底解决与 shell360ext.dll 相关的问题,本文将详细说明如何安全且高效地进行删除操作,并探讨潜在问题及应对策略。首先需要终止所有使用该DLL档案的进程。通过打开任务管理器(按Ctrl+Shift+Esc),用户可以找到相关进程并将其终止。其次,建议在进行系统修改前备份重要数据以避免意外丢失。 接下来,请确定 shell360ext.dll 的具体位置。通常,这些DLL文件位于Windows系统的System32目录下,例如"C:\Windows\System32"。使用搜索功能定位该文件的位置。一旦找到该档案后,即可开始删除操作。右键点击shell360ext.dll,在弹出的菜单中选择“删除”或将其拖入回收站。 在完成删除操作之前,请务必清理与之相关的注册表条目。通过调用注册表编辑器(regedit.exe),用户应谨慎地清除所有涉及该DLL档案的注册表项,以避免潜在系统问题。最后,重启计算机以确保更改生效。 需要注意的是,手动处理DLL文件和注册表操作可能带来风险,不熟悉相关操作的用户应格外谨慎。如果担心误操作导致系统异常,请考虑使用专业的卸载工具或联系技术支持寻求帮助。此外,在删除shell360ext.dll后,若发现系统运行不稳定或出现错误,
内容概要:本文详细介绍了一个基于C++开发的科技学院校园二手商品交易系统的设计与实现。系统旨在解决传统校园二手交易中存在的信息不对称、交易不安全、流程繁琐等问题,通过构建一个高效、稳定、安全的在线平台,实现商品信息发布、搜索、交流、交易及管理的全流程数字化。项目采用C++语言保障系统性能与并发处理能力,具备智能推荐、商品管理、第三方支付集成、用户社交互动、信息安全防护等核心功能,并针对系统性能、安全性、用户体验、信息实时性、法律合规及交易纠纷等挑战提出相应解决方案。系统兼具实用性与技术创新性,支持后续功能扩展。; 适合人群:具备一定C++编程基础的计算机相关专业学生、软件开发初学者及对校园信息化系统开发感兴趣的开发者。; 使用场景及目标:①用于高校内部二手物品交易场景,提升资源利用率与交易安全性;②作为C++大型项目实践案例,帮助开发者掌握系统设计、数据库管理、多线程处理、安全机制等关键技术;③为校园智能化管理系统提供可复用的技术架构参考。; 阅读建议:建议结合文中提到的功能模块与示例代码深入理解系统架构设计思路,重点关注智能推荐、支付集成与安全机制的实现逻辑,并可通过联系作者获取完整代码与GUI设计资料进行动手实践。

34,870

社区成员

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

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