100 分!!关于发送短信选择发送对象时,父部门与子部门间相关问题
我有一个需求:
总公司给下级单位发送站内短信,下级部门的 treeview (带有 checkbox )设置是这样的:
吉林热电厂(1001)
总经部 (10015001)
安全生产部(10015002)
人力资源部(10015003)
辽宁热电厂(1002)
总经部 (10025001)
安全生产部(10025002)
人力资源部(10025003)
大连热电厂(1003)
总经部 (10035001)
安全生产部(10035002)
人力资源部(10035003)
沈阳热电厂(1004)
总经部 (10045001)
安全生产部(10045002)
人力资源部(10045003)
说明:
如果 此 treeview 选择了父节点 1001,则不能够点选其下的子节点 ,只有取消了父节点,才能点选择其下的子节点
最终生成的发送部门的代码集合中,父节点1001与其下的子节点 10015001,10015005 不会同时出现
以下是数据库表 Message 中的几条数据,其中字段 "SendTo " 中存储的就是由 treeview生成的接收单位的代码集合。
-------------------------------------
ID MessageTitle SendTo
1 发送2007年报表 1001,1003,10045002,10045003
2 请上报材料 10015001,10015002,10035001,10035003
3 开会通知 10015001,10015002,10035002,10035003
-----------------------------------
假设我是大连热电厂的总经部,登录后,我的身份代码是:
string myID = Session[ "usercode "] //假设为 = "10035001 "
1.比如第一条短信:
字段 SendTo 中有一个代码为 "1003 " 那就是发送给所有 “大连热电厂” 下的部门的短信,当然也是给 10035001 的短信
2.比如第二条短信:
字段 SendTo 中有一个代码为 "10035001 " 那就是单发送给 大连热电厂的总经部(10035001)的。
3.比如第三条短信:
字段 SendTo 中有代码为 "10035002,10035003 " 那是发送给 大连热电厂其它两个部门的,不是发给 总经部(10035001)的。
现在怎么才能拼一个 sql 语句,取出发给当前登录部门代码为 "10035001 " 的所有短信??
string sql = "select * from Message where 条件要怎么写呢 "
[解决办法]
--创建测试环境
create table #treeview(dept varchar(20) ,id varchar(20))
create table #message(ID int,MessageTitle varchar(100),SendTo varchar(7000))
--插入测试数据
insert #treeview(dept,id)
select '吉林热电厂 ', '1001 ' union all
select '总经部 ', '10015001 ' union all
select '安全生产部 ', '10015002 ' union all
select '人力资源部 ', '10015003 ' union all
select '辽宁热电厂 ', '1002 ' union all
select '总经部 ', '10025001 ' union all
select '安全生产部 ', '10025002 ' union all
select '人力资源部 ', '10025003 ' union all
select '大连热电厂 ', '1003 ' union all
select '总经部 ', '10035001 ' union all
select '安全生产部 ', '10035002 ' union all
select '人力资源部 ', '10035003 ' union all
select '沈阳热电厂 ', '1004 ' union all
select '总经部 ', '10045001 ' union all
select '安全生产部 ', '10045002 ' union all
select '人力资源部 ', '10045003 '
insert #message(ID,MessageTitle,SendTo)
select '1 ', '发送2007年报表 ', '1001,1003,10045002,10045003 ' union all
select '2 ', '请上报材料 ', '10015001,10015002,10035001,10035003 ' union all
select '3 ', '开会通知 ', '10015001,10015002,10035002,10035003 '
create table #message2(ID int,MessageTitle varchar(100),SendTo varchar(7000))
--如果每一级的代码段为4位
declare @dept varchar(20)
set @dept = '10035001 '
while len(@dept) > = 4
begin
insert #message2
select * from #message
where ', '+SendTo+ ', ' like '%, '+@dept+ ',% '
set @dept = left(@dept,len(@dept)-4)
end
select * from #message2
--删除测试环境
drop table #treeview
drop table #message,#message2
/*--测试结果
2请上报材料10015001,10015002,10035001,10035003
1发送2007年报表1001,1003,10045002,10045003
*/
[解决办法]
一条语句我写不出来,只能写一堆。不过结果应该是对的。
如果要拼语句,应该是
exec( '
create table #message2(ID int,MessageTitle varchar(100),SendTo varchar(7000))
declare @dept varchar(20)
set @dept = ' '10035001 ' '
while len(@dept) > = 4
begin
insert #message2
select * from #message
where ' ', ' '+SendTo+ ' ', ' ' like ' '%, ' '+@dept+ ' ',% ' '
set @dept = left(@dept,len(@dept)-4)
end
select * from #message2
drop table #message2 ')