首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sqlserver 表解决方案

2012-03-16 
sqlserver 表函数ByOneBus单独执行:select * from dbo.ByOneBus (站点1,站点6)其查询后表的结构如下:S

sqlserver 表
函数ByOneBus单独执行:select * from dbo.ByOneBus ('站点1','站点6')
  其查询后表的结构如下:
  StRoute
  101
  102
  函数ByTwoBus单独执行:select * from dbo.ByTwoBus ('站点1','站点8')
  其表结构如下:
  StRoute MidStation EndRoute
  101 站点6 108
  101 站点20 104
  函数ByThreeBus单独执行:select * from dbo.ByThreeBus ('站点1','站点25')
  其表结构如下:
  StRoute MidStation1 MidRoute MidStation2 EndRoute
  101 站点11 104 站点21 109
  现在我要将这些弄到一个函数GetBus(@StartStation nvarchar(50),@EndStation nvarchar(50))里面
  但是关键是不知道表的结构,所以我不知道怎么弄。我写了如下代码,但是错误貌似挺多。所以只好来请教大家了!呵呵!求助求助。
 

SQL code
IF OBJECT_ID('GetBus') is not null    drop function GetBusGO/*创建公交车路线直达查询的函数*//*其应返回一张表*//*路线*//* 702*/CREATE FUNCTION GetBus(    @StartStation nvarchar(50),                                    --输入乘客乘车的起始站    @EndStation nvarchar(50)                                    --输入乘客乘车的终点站    )RETURNS  TABLE                                ASBEGIN    DECLARE @temp TABLE(路线 nvarchar(50))    INSERT INTO @temp(路线) SELECT StRoute FROM dbo.ByOneBus(@StartStation,@EndStation)    IF(@temp IS NOT NULL)        RETURN @temp         ELSE        DECLARE @temp TABLE(车次 nvarchar(50),转乘站点 nvarchar(50),转乘车次 nvarchar(50))        INSERT INTO @temp(车次,转乘站点,转乘车次) SELECT StRoute,MidStation,EndRoute FROM dbo.ByTwoBus(@StartStation,@EndStation)        IF(@temp IS NOT NULL)            RETURN @temp        ELSE            DECLARE @temp TABLE(车次 nvarchar(50),转乘站点 nvarchar(50),转乘车次 nvarchar(50),转乘站点2 nvarchar(50),转乘车次2 nvarchar(50))            INSERT INTO @temp(车次,转乘站点,转乘车次,转乘站点2,转乘车次2) SELECT StRoute,MidStation1,MidRoute,MidStation2,EndRoute FROM dbo.ByThreeBus(@StartStation,@EndStation)            RETURN @temp    END


  其我要实现的逻辑是:
  if(ByOneBus查询结果不为空)
  返回ByOneBus查询结果
  else if(ByTwoBus查询结果不为空)
  返回ByTwoBus查询结果
  else
  返回ByThreeBus查询结果

  但是这报错说不能定义多个@temp,并且其代码中间不能有返回值。
   
 

[解决办法]
貌似不行,表值函数只能是一个查询语句,而你写的有程序流程控制,已经不能作为表值函数处理了.

[解决办法]
适当转一下,定义一个容纳最多字段的表,@temp(车次,转乘站点,转乘车次,转乘站点2,转乘车次2,类型标识) ,加一个类型标识符,没有数据的置为null,前台根据类型标识符识别是onebus,twobus....

热点排行