【问题标题】:CTE not working in a SQL Server stored procedureCTE 在 SQL Server 存储过程中不起作用
【发布时间】:2015-04-10 16:51:19
【问题描述】:

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

这是我的存储过程

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

我可以知道上述过程中的问题吗?

【问题讨论】:

  • 在 SSMS 中运行时是否返回数据? candiancrudes 表是什么样的?
  • irt 会在没有程序的情况下返回一些东西吗?
  • @GiorgiNakeuri 它确实返回所需的数据而无需过程
  • 如果我不得不猜测(这是一个有根据的猜测)是你定义你的参数没有长度,这意味着它是一个VARCHAR(1),你的数据中没有那个长度的数据表

标签: c# stored-procedures sql-server-2012


【解决方案1】:

varchar 类型变量的默认 len 为 1。只需在适当的位置更改存储的 proc 参数类型 len:

例如@broker varchar(20)

【讨论】:

  • 哇。我怎么错过了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多