我昨天写的代码,和你要求类似。
--建立测试环境
Create table table1
(code Varchar(10),
name Nvarchar(10))Create table table2
(theCode Nvarchar(50))
GO
--插入数据
Insert table1 Values('001', N'第一')
Insert table1 Values('002', N'第二')
Insert table1 Values('003', N'第三')Insert table2 Values('001,002')
Insert table2 Values('001,003')
Insert table2 Values('001,002,003')
GO
--建立函数
Create Function ReplaceCode(@theCode Nvarchar(50))
Returns Nvarchar(50)
As
Begin
Declare @ReplaceCode Nvarchar(50)
Set @ReplaceCode=''
Select @ReplaceCode=@ReplaceCode+','+Replace(@theCode,@theCode,name) from table1 Where CharIndex(Code,@theCode)>0
Return Stuff(@ReplaceCode,1,1,'')
End
GO
--测试
Select dbo.ReplaceCode(theCode) As theCode from table2
--删除测试环境
Drop Function ReplaceCode
Drop table table1,table2
--结果
/*
theCode
第一,第二
第一,第三
第一,第二,第三
*/
--建立测试环境
Create table table1
(code Varchar(10),
name Nvarchar(10))Create table table2
(theCode Nvarchar(50))
GO
--插入数据
Insert table1 Values('001', N'第一')
Insert table1 Values('002', N'第二')
Insert table1 Values('003', N'第三')Insert table2 Values('001,002')
Insert table2 Values('001,003')
Insert table2 Values('001,002,003')
GO
--建立函数
Create Function ReplaceCode(@theCode Nvarchar(50))
Returns Nvarchar(50)
As
Begin
Declare @ReplaceCode Nvarchar(50)
Set @ReplaceCode=''
Select @ReplaceCode=@ReplaceCode+','+Replace(@theCode,@theCode,name) from table1 Where CharIndex(Code,@theCode)>0
Return Stuff(@ReplaceCode,1,1,'')
End
GO
--测试
Select dbo.ReplaceCode(theCode) As theCode from table2
--删除测试环境
Drop Function ReplaceCode
Drop table table1,table2
--结果
/*
theCode
第一,第二
第一,第三
第一,第二,第三
*/
解决方案 »
- sql 去除重复的问题,急,求高人指点...
- 返回表中月薪前2名名單
- 大家实际工作中做的项目,是用windows身份验证的多呀,还是用sqlserver身份验证的多呀?
- 【农历】计算方法,刚做出来,拿出来和大家分享
- 多级查询如何实现?
- 我现在要判断一个格式为2002-**-** **:**:**的时间是否在两个格式都为2002****之间,找出相应的记录,该怎么写?
- 求一数据库查询问题
- c#连接sqlserver2000,中文数据出现乱码问题。高手请帮忙~在线等
- 怎么修改这个存储过程
- SQL 统计问题?希望大家帮个忙!
- 一个关于去除和恢复自增属性的高难度的问题
- 請問如何設置SQL斷開連接的時間?
ALTER TABLE [T_F] WITH NOCHECK ADD CONSTRAINT [PK_T_F] PRIMARY KEY NONCLUSTERED ( [ID] ) SET IDENTITY_INSERT [T_F] ON INSERT [T_F] ( [ID] , [Per_ID] , [Per_Name] ) VALUES ( 1 , 'zhs' , '张三' )
INSERT [T_F] ( [ID] , [Per_ID] , [Per_Name] ) VALUES ( 2 , 'ls' , '李四' )
INSERT [T_F] ( [ID] , [Per_ID] , [Per_Name] ) VALUES ( 3 , 'ldh' , '刘德华' )
SET IDENTITY_INSERT [T_F] OFF CREATE TABLE [T_E] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [Person_ID] [varchar] (50) NULL )
ALTER TABLE [T_E] WITH NOCHECK ADD CONSTRAINT [PK_T_E] PRIMARY KEY NONCLUSTERED ( [ID] )
SET IDENTITY_INSERT [T_E] ON
INSERT [T_E] ( [ID] , [Person_ID] ) VALUES ( 1 , 'zhs;ls' )
INSERT [T_E] ( [ID] , [Person_ID] ) VALUES ( 2 , 'zhs' )
INSERT [T_E] ( [ID] , [Person_ID] ) VALUES ( 3 , 'ls' )
INSERT [T_E] ( [ID] , [Person_ID] ) VALUES ( 4 , 'zhs;ldh' )
INSERT [T_E] ( [ID] , [Person_ID] ) VALUES ( 5 , 'ldh;ls' )
SET IDENTITY_INSERT [T_E] OFF
go--处理函数
create function f_replace(@Person_ID [varchar] (50))
returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r=';'+@Person_ID+';'
select @r=replace(@r,';'+[Per_ID]+';',';'+[Per_Name]+';')
from T_F
where charindex(';'+[Per_ID]+';',@r)>0
return(substring(@r,2,len(@r)-2))
end
go--调用实现查询
select ID,Person_Name=dbo.f_replace(Person_ID)
from T_E
godrop table T_F,T_E
drop function f_replace/*--结果
ID Person_Name
----------- -------------------
1 张三;李四
2 张三
3 李四
4 张三;刘德华
5 刘德华;李四(所影响的行数为 5 行)
--*/
CREATE TABLE [T_F] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [Per_ID] [varchar] (50) NULL , [Per_Name] [Nvarchar] (50) NULL )
ALTER TABLE [T_F] WITH NOCHECK ADD CONSTRAINT [PK_T_F] PRIMARY KEY NONCLUSTERED ( [ID] )CREATE TABLE [T_E] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [Person_ID] [varchar] (50) NULL )
ALTER TABLE [T_E] WITH NOCHECK ADD CONSTRAINT [PK_T_E] PRIMARY KEY NONCLUSTERED ( [ID] )GO
--插入数据
INSERT [T_F] VALUES ( 'zhs' , N'张三' )
INSERT [T_F] VALUES ( 'ls' , N'李四' )
INSERT [T_F] VALUES ( 'ldh' , N'刘德华' ) INSERT [T_E] VALUES ( 'zhs;ls' )
INSERT [T_E] VALUES ( 'zhs' )
INSERT [T_E] VALUES ( 'ls' )
INSERT [T_E] VALUES ( 'zhs;ldh' )
INSERT [T_E] VALUES ( 'ldh;ls' )
GO
--建立函数
Create Function ReplaceID(@Person_ID Nvarchar(50))
Returns Nvarchar(50)
As
Begin
Declare @Person_Name Nvarchar(50)
Set @Person_Name=''
Select @Person_Name=@Person_Name+';'+Replace(@Person_ID,@Person_ID,Per_Name) from T_F Where CharIndex(Per_ID,@Person_ID)>0
Return Stuff(@Person_Name,1,1,'')
End
GO
--测试
Select ID,dbo.ReplaceID(Person_ID) As Per_Name from T_E
--删除测试环境
Drop table T_E,T_F
Drop Function ReplaceID
--结果
/*
ID Per_Name
1 张三;李四
2 张三
3 李四
4 张三;刘德华
5 李四;刘德华
*/
Create table table1
(code Varchar(10),
name Nvarchar(10))Create table table2
(theCode Nvarchar(50))
GO
--插入数据
Insert table1 Values('001', N'第一')
Insert table1 Values('002', N'第二')
Insert table1 Values('003', N'第三')
Insert table1 Values('1', N'张一')
Insert table1 Values('2', N'张二')
Insert table1 Values('3', N'张三')Insert table2 Values('001,002,001') --001重复
Insert table2 Values('001,003')
Insert table2 Values('001,002,003')
GO
--建立函数
Create Function ReplaceCode(@theCode Nvarchar(50))
Returns Nvarchar(50)
As
Begin
Declare @ReplaceCode Nvarchar(50)
Set @ReplaceCode=''
Select @ReplaceCode=@ReplaceCode+','+Replace(@theCode,@theCode,name) from table1 Where CharIndex(Code,@theCode)>0
Return Stuff(@ReplaceCode,1,1,'')
End
GO
--测试
Select dbo.ReplaceCode(theCode) As theCode from table2
--删除测试环境
Drop Function ReplaceCode
Drop table table1,table2
--结果
/*
theCode
------------------------------------
第一,第二,张一,张二
第一,第三,张一,张三
第一,第二,第三,张一,张二,张三
*/