EXEC('
INSERT ' +  @Airline +' (
Departure,
Destination,
FeederRoutingID,
OnlineRoutingID,
InterlineRoutingID,
FeederFareID,
OnlineFareID,
InterlineFareID,
ContractID,
DateFrom,
DateTo,
IsRoundTrip,
Airline)
SELECT t1.a as Departure,t2.a as Destination,'
'CASE WHEN ' + @FeederRoutingID + ' IS NULL THEN NULL ELSE ' '' + @FeederRoutingID + ''' END ,''' + 
@OnlineRoutingID+ ''',' + 
'CASE WHEN ' + @InterlineRoutingID +  'IS NULL THEN NULL ELSE ' '' + @InterlineRoutingID + ''' END ,''' + 
'CASE WHEN ' + @FeederFareID +  'IS NULL THEN NULL ELSE ' '' + @FeederFareID + ''' END ,''' + 
@OnlineFareID+ ''',' + 
'CASE WHEN ' + @InterlineFareID +  'IS NULL THEN NULL ELSE ' '' + @InterlineFareID + ''' END ,''' + 
@ContractID+ ''',''' + 
@DateFrom+ ''',''' + 
@DateTo+ ''',''' + 
@IsRoundTrip+ ''',''' + 
@Airline + ''' FROM
(
select airportcode As a from 
(
select * from zone where zoneNo='''+ @FeederDep + ''')Z
INNER JOIN ZoneElement ZE ON Z.zoneID=ZE.zoneID
INNER JOIN MST_AirPort A ON A.AirPortID=ZE.AirPortID 
) AS t1
CROSS JOIN
(
select airportcode As a from 
(
select * from zone where zoneNo='''+ @Destination + ''')Z
INNER JOIN ZoneElement ZE ON Z.zoneID=ZE.zoneID
INNER JOIN MST_AirPort A ON A.AirPortID=ZE.AirPortID 
) AS t2
')

解决方案 »

  1.   

    SELECT t1.a as Departure,t2.a as Destination,'+   --很显然这里少了一个+号
      

  2.   

    EXEC('
    INSERT ' +  @Airline +' (
    Departure,
    Destination,
    FeederRoutingID,
    OnlineRoutingID,
    InterlineRoutingID,
    FeederFareID,
    OnlineFareID,
    InterlineFareID,
    ContractID,
    DateFrom,
    DateTo,
    IsRoundTrip,
    Airline)
    SELECT t1.a as Departure,t2.a as Destination,CASE WHEN ' +   -----这里有问题
    @FeederRoutingID + ' IS NULL THEN NULL ELSE ' '' + @FeederRoutingID + ''' END ,''' + 
    @OnlineRoutingID+ ''',' + 
    'CASE WHEN ' + @InterlineRoutingID +  'IS NULL THEN NULL ELSE ' '' + @InterlineRoutingID + ''' END ,''' + 
    'CASE WHEN ' + @FeederFareID +  'IS NULL THEN NULL ELSE ' '' + @FeederFareID + ''' END ,''' + 
    @OnlineFareID+ ''',' + 
    'CASE WHEN ' + @InterlineFareID +  'IS NULL THEN NULL ELSE ' '' + @InterlineFareID + ''' END ,''' + 
    @ContractID+ ''',''' + 
    @DateFrom+ ''',''' + 
    @DateTo+ ''',''' + 
    @IsRoundTrip+ ''',''' + 
    @Airline + ''' FROM
    (
    select airportcode As a from 
    (
    select * from zone where zoneNo='''+ @FeederDep + ''')Z
    INNER JOIN ZoneElement ZE ON Z.zoneID=ZE.zoneID
    INNER JOIN MST_AirPort A ON A.AirPortID=ZE.AirPortID 
    ) AS t1
    CROSS JOIN
    (
    select airportcode As a from 
    (
    select * from zone where zoneNo='''+ @Destination + ''')Z
    INNER JOIN ZoneElement ZE ON Z.zoneID=ZE.zoneID
    INNER JOIN MST_AirPort A ON A.AirPortID=ZE.AirPortID 
    ) AS t2
    ')
      

  3.   

    to:
    libin_ftsafe(子陌红尘:TS for Banking Card)是少了个+,编译过,但执行出现如下的问题:
    服务器: 消息 156,级别 15,状态 1,行 16
    在关键字 'IS' 附近有语法错误。
    服务器: 消息 105,级别 15,状态 1,行 28
    字符串 ')Z
    INNER JOIN ZoneElement ZE ON Z.zoneID=ZE.zoneID
    INNER JOIN MST_AirPort A ON A.AirPortID=ZE.AirPortID 
    ) AS t2
    ' 之前有未闭合的引号。
      

  4.   

    搞定了,说明一下:
    1,SELECT t1.a as Departure,t2.a as Destination,''' 
    这里要'''个我忽视了,
    2,我用的数据类型不是很好UNIQUEIDENTIFIER
    DECLARE @IDZERO UNIQUEIDENTIFIER
    SET @IDZERO ='00000000-0000-0000-0000-000000000000'插入的时候一定要转一下,SET @IDZERO ='00000000-0000-0000-0000-000000000000',这样才能识别。@FeederRoutingID + ''',''' +  BEGIN
    EXEC  (
    'INSERT ' + @Airline + ' (
    Departure,
    Destination,
    FeederRoutingID,
    OnlineRoutingID,
    InterlineRoutingID,
    FeederFareID,
    OnlineFareID,
    InterlineFareID,
    ContractID,
    DateFrom,
    DateTo,
    IsRoundTrip,
    Airline)
    SELECT t1.a as Departure,t2.a as Destination,'''+
    @FeederRoutingID + ''',''' + 
    @OnlineRoutingID+ ''',''' + 
    @InterlineRoutingID+ ''',''' + 
    @FeederFareID+ ''',''' + 
    @OnlineFareID+ ''',''' + 
    @InterlineFareID+ ''',''' + 
    @ContractID+ ''',''' + 
    @DateFrom+ ''',''' + 
    @DateTo+ ''',''' + 
    @IsRoundTrip+ ''',''' + 
    @Airline + ' '' 
    FROM 
    (
    select airportcode As a from 
    (select * from zone where zoneNo=''' + @FeederDep + ''')Z
    INNER JOIN ZoneElement ZE ON Z.zoneID=ZE.zoneID
    INNER JOIN MST_AirPort A ON A.AirPortID=ZE.AirPortID 
    ) AS t1
    CROSS JOIN
    ( select airportcode As a from 
    (select * from zone where zoneNo=''' + @Destination + ''')Z
    INNER JOIN ZoneElement ZE ON Z.zoneID=ZE.zoneID
    INNER JOIN MST_AirPort A ON A.AirPortID=ZE.AirPortID 
    ) AS t2
    ORDER BY Departure,Destination')
    END