【问题标题】:pass parameter to CTE将参数传递给 CTE
【发布时间】:2015-02-07 19:11:33
【问题描述】:

我有 3 个 CTE 的查询。我很好奇如何将参数传递给它们。如果我在查询的顶部声明

声明@prioryear varchar(5) 设置@prioryear = '2014'

声明@currentyear varchar(5) 设置@prioryear = '2015'

那么我怎样才能将这些变量传递到 CTE 中呢?我一直在尝试在 CTE 名称后面加上括号,但似乎没有什么想通过。

谢谢, 乔

`

with paidPrior as (
SELECT DISTINCT des_heapplicationSet.des_PeopleId
FROM         des_heapplicationSet INNER JOIN
                      des_zyearSet ON des_heapplicationSet.des_YearId = des_zyearSet.des_zyearId INNER JOIN
                      des_zapplicationstatusSet ON des_heapplicationSet.des_ApplicationStatusId = des_zapplicationstatusSet.des_zapplicationstatusId

WHERE     (des_zyearSet.des_YearText = '2014') AND (des_zapplicationstatusSet.des_applicationstatustext = 'paid') and des_IsMaster =0
),

allCurrent as (
SELECT DISTINCT des_heapplicationSet.des_PeopleId
FROM         des_heapplicationSet INNER JOIN
                      des_zyearSet ON des_heapplicationSet.des_YearId = des_zyearSet.des_zyearId
WHERE     (des_zyearSet.des_YearText = '2015') and des_IsMaster =0
),

peopleSet as (
select distinct des_PeopleId, MAX(des_ApplicationNumber) as appNum
from des_heapplicationSet
where des_PeopleId in (select * from paidPrior) and des_PeopleId not in (select * from allCurrent)
group by des_PeopleId
)

SELECT     des_zterritorySet.des_TerritoryText, des_hepeopleSet.des_PeopleNumber, des_hepeoplenameSet.des_FirstName, des_hepeoplenameSet.des_LastName, des_headdressmasterSet.des_AddressLine, 
                      des_headdressmasterSet.des_FinalCity, des_headdressmasterSet.des_Zip5, des_headdressmasterSet.des_CountyName, 'WI' as stateOfWi,  des_hepeoplephoneSet.des_PhoneNumber, 
                      des_heapplicationSet.des_EmailAddress
FROM         des_heapplicationSet INNER JOIN
                      des_hepeopleSet ON des_heapplicationSet.des_PeopleId = des_hepeopleSet.des_hepeopleId INNER JOIN
                      des_headdressmasterSet ON des_heapplicationSet.des_MailingAddressId = des_headdressmasterSet.des_headdressmasterId INNER JOIN
                      des_zterritorySet ON des_heapplicationSet.des_TerritoryId = des_zterritorySet.des_zterritoryId INNER JOIN
                      des_hepeoplenameSet ON des_heapplicationSet.des_PeopleNameId = des_hepeoplenameSet.des_hepeoplenameId LEFT OUTER JOIN
                      des_hepeoplephoneSet ON des_heapplicationSet.des_PeoplePrimaryPhoneId = des_hepeoplephoneSet.des_hepeoplephoneId
where des_ApplicationNumber in (select appnum from peopleSet) and des_TerritoryText = 'Adams'
order by des_TerritoryText
`

【问题讨论】:

    标签: sql sql-server-2008-r2 common-table-expression


    【解决方案1】:

    你不能直接引用变量吗?在 CTE 中将“2015”替换为 @currentyear

    【讨论】:

    • 只要我将声明语句添加到顶部。我在关键字“with”附近收到 Msg 319, Level 15, State 1, Line 5 语法错误。如果此语句是公用表表达式、xmlnamespaces 子句或更改跟踪上下文子句,则前面的语句必须以分号结束。错误
    • 呃!只需要在参数后面加一个分号!
    • 啊,是的,很多新语法都需要;而且很容易忘记 - 我自己做的很多:)
    猜你喜欢
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 2013-11-19
    相关资源
    最近更新 更多