带有关系的计算列

时间:2012-09-13 21:07:18

标签: sql-server-2008

我有一个表MapLocation,它有一个列和两个关系,这些表的字段确实需要显示为单个连接值。我认为这是一个计算列的完美案例,但不知道如何去做。

 MapLocation                          MaoNo                         Section   
_____________________                 _____________________         _____________________
 MapNoId                              MapNoId                       SectionId
 SectionId                            MapNumber (int)               Section (int)
 Identifier (nvarchar)
 LocationName (nvarchar)

LocationName =“MapNUmber - SectionNumber - Identifier”
例如:20 - 03 - SW4

我该怎么写?我在计算列中没有做太多工作或在SQL中连接。

编辑:

我需要一个自动更新的实际计算列,即时寻找公式。或者这更像是一个功能/触发器?它可能,我当然几乎不知道我在做什么。我的想法是,我不想再进行两次服务器调用,并将这些值连接到客户端。

1 个答案:

答案 0 :(得分:0)

您可以使用类似的内容来获取值:

select cast(n.MapNumber as nvarchar(10)) + ' - '   -- cast the MapNumber 
    + cast(s.SectionId as nvarchar(10)) + ' - '    -- cast the SectionId 
    + l.Identifier  
from MapLocation l
left join MaoNo n
    on l.MapNoId  = n.MapNoId 
left join Section s
    on l.SectionId = s.SectionId

然后,如果您需要执行UPDATE

update l
set l.LocationName =  (cast(n.MapNumber as nvarchar(10)) + ' - '    
                    + cast(s.SectionId as nvarchar(10)) + ' - '   
                    + l.Identifier)
from MapLocation l
left join MaoNo n
    on l.MapNoId  = n.MapNoId 
left join Section s
    on l.SectionId = s.SectionId

编辑#1 - 您可以使用TRIGGER

CREATE TRIGGER trig_LocationName
ON MapLocation
AFTER INSERT
AS
Begin
    update MapLocation
    set LocationName =  (cast(n.MapNumber as nvarchar(10)) + ' - '    
                                        + cast(s.SectionId as nvarchar(10)) + ' - '   
                                        + i.Identifier)
    from Inserted i
    left join MaoNo n
        on i.MapNoId  = n.MapNoId 
    left join Section s
        on i.SectionId = s.SectionId
    where MapLocation.MapNoId  = i.MapNoId  -- fields here to make sure you update the correct record
End