在前端但在SQL数据中获取"Top clause包含无效值"的错误清晰可见

Aji*_*kya 2 c# sql asp.net

将数据绑定到Dataview时会出现此错误,但参数正确地发送了该值.

似乎DBhelper类抛出了这个错误,但不知道为什么

我的程序:

   insert #leads(opp_lead,opp_NAME,CNT) 
select  opp_lead,'LEAD'+opp_lead,COUNT(*) from #pipeline GROUP BY opp_lead
UPDATE #leads SET opp_NAME=CONTACT_NAME FROM TBLCONTACT C,  #leads L WHERE CONVERT(VARCHAR(50),L.opp_lead)=CONVERT(VARCHAR(50),C.CONTACT_ID) 
COUNT(*) DESC
    create table #YearlyEndCampaign
       (
        slno INT ,  
           lvl int        
       )
SELECT TOP 1 @MAXLEADS=COUNT(*) FROM #pipeline   GROUP BY opp_lead ORDER BY COUNT(*) DESC  

INSERT INTO #YearlyEndCampaign(slno,LVL)
    SELECT SEQ,0 FROM (SELECT TOP (@MAXLEADS) seq = ROW_NUMBER() OVER (ORDER BY number)  FROM [master]..spt_values)S
Run Code Online (Sandbox Code Playgroud)

C#代码:

long businessID = Convert.ToInt64(Session["BusinessID"]);
long YEAR = Convert.ToInt64(2015);    
long UserID = Convert.ToInt64(Session["Contact_ID"]);

BeggingDA objBeggingDA = new BeggingDA();          
DataView dv = (new BeggingDA()).BeggingLoadByBusinessID(YEAR, businessID, UserID);
Run Code Online (Sandbox Code Playgroud)

Rhu*_*orl 7

如你所说,第一个SELECT TOP 1 @MAXLEADS=COUNT(*) FROM #pipeline语句没有返回任何数据.这意味着它@MAXLEADS是null.

如果然后运行select top (NULL) FROM [master]..spt_values,则会收到TOP clause contains an invalid value错误,因为您没有传递数值TOP.

解决方法是@MAXLEADS在执行插入之前检查是否为null - 如果没有任何行,则选择前0,因此无论如何都要进行插入是没有意义的.一个简单IF @MAXLEADS IS NOT NULL就足够了:

SELECT TOP 1 @MAXLEADS=COUNT(*) FROM #pipeline   GROUP BY opp_lead ORDER BY COUNT(*) DESC  

IF @MAXLEADS IS NOT NULL BEGIN

    INSERT INTO #YearlyEndCampaign(slno,LVL)
        SELECT SEQ,0 FROM (SELECT TOP (@MAXLEADS) seq = ROW_NUMBER() OVER (ORDER BY number)  FROM [master]..spt_values)S

END
Run Code Online (Sandbox Code Playgroud)