假如系统有三个模块,第一个是合同表(Pact),第二个是项目(Project),第三个是回款(PayBack),另外有一个费用表,费用要记录到底是属于哪个合同或是项目或是回款的费用。我做了一个系统表的记录,统计系统里面有哪些表,表结构如下:Sys_ModuleID,ModuleName,TabelName, PrimaryKeyId,PrimaryName
1                合同       Pact          PactID      PactName
2                项目       Project       ProjectID   ProjectName
3                回款       PayBack       PayBackID   PayBackName
现在费用表里有两个字段(Sys_ModuleID,PrimaryKeyId)记录了到底是哪个表的哪一条数据,比如这里如果有一条记录如下:费用ID, 费用名称,Sys_ModuleID,PrimaryKeyId
1         招待费        1            21这个就代表这个招待费是合同的第21条数据,这里假设第21条合同的数据是“合同A”,这个名称是Pact表里的PactName这个字段,那么就是代表这个招待费是合同A的招待费。现在我想建一个费用的视图,直接能够把“合同A”加到视图里,如下:费用ID, 费用名称,Sys_ModuleID,PrimaryKeyId,Name
1         招待费        1            21         合同A
请教一下怎么能实现,谢谢

解决方案 »

  1.   


    -->try
    select a.费用ID,
    a.费用名称,
    a.PrimaryKeyId,
    b.TableName,
    b.PrimaryName  
    from 费用表 a,系统表 b
    where a.Sys_ModuleID=b.Sys_ModuleIDdeclare @tab table(ID int,name varchar(30))
    declare @sql varchar(max)
    select @sql=(select qs+' union all ' from
    (
    select 'select '+b.PrimaryName+','+ltrim(a.费用ID)+' ID 
    from '+b.TableName+' 
    where '+ltrim(b.PrimaryKeyId)+'='''+ltrim(a.PrimaryKeyId)+'''' qs
    from 费用表 a,系统表 b
    where a.Sys_ModuleID=b.Sys_ModuleID
    )t)
    insert into @tab
    exec(@sql)
    select a.费用ID,a.费用名称,a.Sys_ModuleID,a.PrimaryKeyId,b.name
    from 费用表 a,@tab b
    where a.费用ID=b.ID视图里不支持exec,你可以将上面代码写成一个存储,然后在视图里用openrowset来调用就可以了