TA表:(BeginName和EndName列为地名与公司名称混合的数据)
OFID  BeginName   EndName
============================
D3424  公司A    北京市
D8620  公司B    天津市
E3489  青岛市    北京市
F7396  宣化县    公司C
H2347  邯郸市    武汉市
R7289  张家口市   公司CTB表:
IncID  IncName  Place
=========================
1    公司A   宣化县
2    公司B   青岛市
3    公司C   北京市TC表:
Code  Province   City     PlaceName
=============================================
1    北京市    北京市    北京市
2    河北省    张家口市   宣化县
3    山东省    青岛市    青岛市
4    河北省    张家口市   张家口市
5    河北省    邯郸市    邯郸市想要一个存储过程(注意效率)
CREATE PROCEDURE ShowList
  @BeginName varchar(30)   --起点城市
  @EndName varchar(30)   --终点城市
AS执行结果如下:
1、ShowList '张家口市','北京市'
OFID  BeginName  EndName
============================
D3424  公司A    北京市
F7396  宣化县    公司C
R7289  张家口市   公司C

解决方案 »

  1.   

    -- =========================================
    -- -----------t_mac 小编-------------------
       --------------------希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('TA') IS NOT NULL
    DROP TABLE tA
    GO
    CREATE TABLE tA( OFID varchar(10),BeginName varchar(10) ,EndName  varchar(10))
    go
    insert tA SELECT 
    'D3424','公司A','北京市' UNION ALL SELECT 
    'D8620','公司B','天津市' UNION ALL SELECT 
    'E3489','青岛市','北京市' UNION ALL SELECT 
    'F7396','宣化县','公司C' UNION ALL SELECT 
    'H2347','邯郸市','武汉市' UNION ALL SELECT 
    'R7289','张家口市','公司C' 
    GO
    IF OBJECT_ID('TB') IS NOT NULL
    DROP TABLE tB
    GO
    CREATE TABLE tB( IncID INT ,IncName varchar(10) ,Place   varchar(10))
    go
    insert tB SELECT 
     1,'公司A','宣化县' UNION ALL SELECT 
    2,'公司B','青岛市' UNION ALL SELECT 
    3,'公司C','北京市' 
    GO
    IF OBJECT_ID('TC') IS NOT NULL
    DROP TABLE tC
    GO
    CREATE TABLE tC( Code INT ,Province varchar(10) ,City varchar(10),PlaceName varchar(10))
    go
    insert tC SELECT 
    1,'北京市','北京市','北京市' UNION ALL SELECT 
    2,'河北省','张家口市','宣化县' UNION ALL SELECT 
    3,'山东省','青岛市','青岛市'UNION ALL SELECT 
    4,'河北省','张家口市','张家口市' UNION ALL SELECT 
    5,'河北省','邯郸市','邯郸市' 
    GO
    create  PROCEDURE ShowList 
      @BeginName varchar(30),  --起点城市 
      @EndName varchar(30)  --终点城市 
    AS 
    begin 
    select *
    from ta 
    where BeginName=@BeginName or 
    BeginName in(select PlaceName 
    from TB join tc ON TB.Place=tc.PlaceName 
    where  City=@BeginName) 
    or ((EndName=@EndName or
    EndName  in(select PlaceName 
    from TB join tc ON TB.Place=tc.PlaceName 
    where  City=@endName)) and BeginName  like '%公司%' )end
    goexec  ShowList '张家口市','北京市' 
    /*
    OFID  BeginName  EndName 
    ============================ 
    D3424  公司A    北京市 
    F7396  宣化县    公司C 
    R7289  张家口市   公司C*/
      

  2.   

    完善下create  PROCEDURE ShowList 
      @BeginName varchar(30),  --起点城市 
      @EndName varchar(30)  --终点城市 
    AS 
    begin 
    select *
    from ta 
    where (BeginName=@BeginName or 
    BeginName in(select PlaceName 
    from TB join tc ON TB.Place=tc.PlaceName 
    where  City=@BeginName) and EndName   like '%公司%' ) 
    or ((EndName=@EndName or
    EndName  in(select PlaceName 
    from TB join tc ON TB.Place=tc.PlaceName 
    where  City=@endName)) and BeginName  like '%公司%' )end
    goexec  ShowList '张家口市','北京市' 
      

  3.   


    我基本也是这个思路,总感觉执行效率很低,如果TA表数据量越来越大,效率会更低,我也考虑过表结构问题,TA表也只能这样设计,除非为了效率,再加一个表,把“公司名称”的在数据录入时即转换为地名,帮忙再想想办法