我昨天写的代码,和你要求类似。
--建立测试环境
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
第一,第二
第一,第三
第一,第二,第三
*/

解决方案 »

  1.   

    CREATE TABLE [T_F] (  [ID] [int] IDENTITY (1, 1) NOT NULL , [Per_ID] [varchar] (50) NULL , [Per_Name] [varchar] (50) NULL )
     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 行)
    --*/
      

  2.   

    根据你的要求改写的。--建立测试环境
    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 李四;刘德华
    */
      

  3.   

    --建立测试环境
    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
    ------------------------------------
    第一,第二,张一,张二
    第一,第三,张一,张三
    第一,第二,第三,张一,张二,张三
    */