CTE 在 SQL 服务器存储过程中不工作

CTE not working in a SQL Server stored procedure

当我在 C# 应用程序中使用 CTE 时,我正在编写一个存储过程,但由于某些原因,该存储过程没有返回任何数据

这是我的存储过程

ALTER procedure [dbo].[sp_GetBrokerData]
     @broker Varchar
as
Begin
    With CTE AS 
    (
        select   
            Product, Term,
            CASE 
                WHEN BidBroker = @broker THEN BidBroker 
                ELSE null 
            END AS BidBroker,
            CASE 
                WHEN BidBroker = @broker THEN BidVolume 
                ELSE null 
            END AS BidVolume,
            CASE 
                WHEN BidBroker = @broker THEN BidCP 
                ELSE null 
            END AS BidCP,
            CASE 
                WHEN BidBroker = @broker THEN Bid 
                ELSE null 
            END AS Bid,
            CASE WHEN OfferBroker = @broker THEN Offer ELSE null end as Offer,
            CASE WHEN OfferBroker = @broker THEN OfferCP ELSE null end as OfferCP,
            CASE WHEN OfferBroker = @broker THEN OfferVolume ELSE null end as OfferVolume,
            CASE WHEN OfferBroker = @broker THEN OfferBroker ELSE null end as OfferBroker
        from 
            canadiancrudes
   )
   Select * 
   From CTE 
   Where not (Bid is null and Offer is null)
End

请问上面的过程有什么问题吗?

类型为varchar的变量的默认长度为1。只需将存储的过程参数类型长度更改为适当的:

例如@broker varchar(20)