首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试更多地了解动态SQL语法

尝试更多地了解动态SQL语法
EN

Stack Overflow用户
提问于 2015-12-17 09:47:40
回答 2查看 25关注 0票数 0

如果我用这个结束我的查询:

代码语言:javascript
运行
复制
  +'SELECT 
    CPS.CalculatedFromText, 
    CPS.TreatmentOrdinal,
    CPS.ProductID, 
    CPS.OptimizationGroupID,
    CPS.CountCalculatedFromText,
    CPS.CountCalculatedFromText/T.AllCalculatedFromText AS PercentCalculatedFromText,
    CPS.CurrencyCode,
    CPS.Origin,
    CPS.Destination,'+
    case when @passangers='Y' then 'CPS.Passangersgroup'
    when @fareclass='Y' then 'CPS.Fareclass'
    when @ispriorbooking='Y' then 'CPS.IsPriorBooking'
    else '' end +'
INTO ##PercentCalculatedFromText
FROM ##CountCalculatedFromText AS CPS
    INNER JOIN ##AllCalculatedFromText T ON T.ProductID = CPS.ProductID
        AND T.OptimizationGroupID = CPS.OptimizationGroupID
        AND T.CurrencyCode = CPS.CurrencyCode
        AND T.Origin=CPS.Origin
        AND T.Destination=CPS.Destination,'+
    case when @passangers='Y' then ' AND T.Passangersgroup=CPS.Passangersgroup'
    when @fareclass='Y' then 'AND T.Fareclass=CPS.Fareclass'
    when @ispriorbooking='Y' then 'AND T.IsPriorBooking=CPS.IsPriorBooking'
    else '' end

exec (@SQL2)

它不工作,在‘’附近有错误的语法。但这一点:

代码语言:javascript
运行
复制
+' SELECT 
    ProductID, 
    OptimizationGroupID,
    SUM(CountCalculatedFromText) AS AllCalculatedFromText,
    CurrencyCode,
    Origin,
    Destination,'+
    case when @passangers='Y' then 'Passangersgroup'
    when @fareclass='Y' then 'Fareclass'
    when @ispriorbooking='Y' then 'IsPriorBooking'
    else '' end +'
INTO ##AllCalculatedFromText
FROM ##CountCalculatedFromText AS cps2
GROUP BY ProductID,
    OptimizationGroupID,
    CurrencyCode,
    Origin,
    Destination,'+
    case when @passangers='Y' then 'Passangersgroup'
    when @fareclass='Y' then 'Fareclass'
    when @ispriorbooking='Y' then 'IsPriorBooking'
    else ''
end
exec (@SQL2)

工作(我所做的就是把exec语句移到第一组代码上面)

我不明白我是怎么搞错的。

进一步的问题:如果动态sql代码以‘结尾,您可以运行exec语句吗?

当你可能以这样的东西结束时,你会怎么做:

代码语言:javascript
运行
复制
case when @passangers='Y' then 'Passangersgroup'
    when @fareclass='Y' then 'Fareclass'
    when @ispriorbooking='Y' then 'IsPriorBooking'
    else '' 
+
'variable X'

SQL SERVER 2014

EN

回答 2

Stack Overflow用户

发布于 2015-12-17 09:52:57

在第一个查询的Join条件中有额外的comma

代码语言:javascript
运行
复制
........
'INNER JOIN ##AllCalculatedFromText T ON T.ProductID = CPS.ProductID
        AND T.OptimizationGroupID = CPS.OptimizationGroupID
        AND T.CurrencyCode = CPS.CurrencyCode
        AND T.Origin=CPS.Origin
        AND T.Destination=CPS.Destination' + --here
 case when @passangers='Y' then ' AND T.Passangersgroup=CPS.Passangersgroup'
.........
票数 0
EN

Stack Overflow用户

发布于 2015-12-17 09:53:50

在第二种情况下,字符串的开头也有一个空格。这可能会严重改变所发生的事情,这取决于字符串被附加到末尾的方式。如果它以新行结束,则没有区别,但如果它以前一个命令的最后一个字符或' end‘结束,则将以'ENDSELECT’结束。‘'END SELECT’,这将是非常不同的行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34325332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档