--测试数据
create table Employee(EmployeeID int,DeptIDs int,DeptName varchar(10),Name varchar(10),ScreenName varchar(10),Password varchar(10),JobTitle varchar(10))
insert Employee select 1000,2,'技术部','张三','zs','123456','程序员'
union all select 1001,3,'财务部','李四','ls','456789','会计'
union all select 1002,4,'业务部','王五','ww','147258','业务员'
union all select 1003,5,'行政部','赵六','zl','546256','接线员'
--查询
declare @SenderID int
set @SenderID=1003 --要查询的SenderID
select MessageID,SenderID,MessageType,Title,Content
,SendDate=convert(varchar(10),SendDate,120),Receivers
from Message where SenderID=@SenderID
union all
select a.*
from Employee a join Message b
on ','+b.Receivers+',' like '%,'+cast(a.EmployeeID as varchar)+',%'
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[splitstring]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[splitstring]
GO
CREATE FUNCTION dbo.splitstring(@str varchar(4000),@c varchar(10))
RETURNS @t table(s varchar(100))
AS
BEGIN
DECLARE @s varchar(4000)
SET @s=@str
WHILE CHARINDEX(@c,@s)>0
BEGIN
INSERT INTO @t(s) VALUES(LEFT(@s,CHARINDEX(@c,@s)-1))
SET @s=RIGHT(@s,LEN(@s)-CHARINDEX(@c,@s))
END
INSERT INTO @t(s) VALUES(@s)
RETURN
END
GO
--调用:
select * from dbo.SplitString('1000,1001,1002',',')
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[splitstring]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[splitstring]
GO
CREATE FUNCTION dbo.splitstring(@str varchar(4000),@c varchar(10))
RETURNS @t table(s varchar(100))
AS
BEGIN
DECLARE @s varchar(4000)
SET @s=@str
WHILE CHARINDEX(@c,@s)>0
BEGIN
INSERT INTO @t(s) VALUES(LEFT(@s,CHARINDEX(@c,@s)-1))
SET @s=RIGHT(@s,LEN(@s)-CHARINDEX(@c,@s))
END
INSERT INTO @t(s) VALUES(@s)
RETURN
END
GO
--调用:
select * from dbo.SplitString('1000,1001,1002',',')
--调用示例
select * from dbo.fsplit('a;adf;fd;ed;dh',';')
select * from dbo.fsplit('a,,adf,,fd,,ed,,dh',',,')
邹建 2003.07*/
--检查函数是否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fsplit]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[fsplit]
GO
--创建字符串分拆的函数
create function fsplit(
@str varchar(8000) --要分拆的字符串
,@spli varchar(10) --字符串分隔符
)
returns @re table(istr varchar(8000))
as
begin
declare @i int,@splen int
select @splen=len(@spli)
,@i=charindex(@spli,@str)
while @i>0
begin
insert into @re values(left(@str,@i-1))
select @str=substring(@str,@i+@splen,8000)
,@i=charindex(@spli,@str)
end
if @str<>'' insert into @re values(@str)
return
end
--將@vchString字符串以@vchSplit為分割符分割成記錄集
-- DROP FUNCTION dbo.FunSplitStringToAraay
-- SELECT * FROM dbo.FunSplitStringToAraay('28,353,2,35,88',',')
CREATE FUNCTION dbo.FunSplitStringToAraay(@vchString varchar(1000),@vchSplit varchar(10))
RETURNS @tabArray table
(
string varchar(100)
)
AS
BEGIN
DECLARE @intStart int
DECLARE @intLocation int
DECLARE @vchSubstring varchar(100)
SELECT @intStart =1
SELECT @intLocation = CHARINDEX(@vchSplit,@vchString,@intStart)
WHILE (@intLocation <>0 )
BEGIN
SELECT @vchSubstring=SUBSTRING(@vchString,@intStart,@intLocation-@intStart)
INSERT INTO @tabArray(string) SELECT @vchSubstring
SELECT @intStart = @intLocation +1
SELECT @intLocation = CHARINDEX(@vchSplit,@vchString,@intStart)
END
RETURN
END