【问题标题】:Store Procedure is working perfectly fine when executed from front end but is not working when I execute it in sql server存储过程在从前端执行时工作得很好,但在我在 sql server 中执行时却不工作
【发布时间】:2012-09-19 15:30:15
【问题描述】:

我创建了一个存储过程,当我从端(即 C#.net)执行它时,或者当我在单独的 SQL 查询窗口中复制并过去存储过程的查询时,它工作得非常好,但它既不给出任何结果,也不给出任何错误我使用 EXEC sp_Name 在 SQL Server 中执行它。我不明白我的代码有什么问题。

下面是我的存储过程

ALTER PROCEDURE sp_tbl_REQUEST_SelectAllByFilter_WithPagging
@PageIndex INT=NULL,
@PageRecord INT=NULL,
@SortExpression NVARCHAR (200)='int_Request_ID',
@SortDirection NVARCHAR (10)='ASC',
@int_Requester_ID INT=NULL,
@intProjectID   INT=NULL
AS
BEGIN
SET NOCOUNT ON
DECLARE @StartRowIndex INT
SET @StartRowIndex=((@PageIndex-1)*@PageRecord)+1;

DECLARE @WhrClause VARCHAR(MAX)
SET @WhrClause= 'WHERE  tr.int_Requester_ID = '+CONVERT(VARCHAR(MAX), @int_Requester_ID)
IF(@intProjectID>0)
BEGIN
    SET @WhrClause=@WhrClause+' AND tr.int_Project_ID='+CONVERT(VARCHAR(MAX),@intProjectID)
END
DECLARE @SelectClause VARCHAR(MAX)
SET @SelectClause=';With AllRecords AS(SELECT Row_Number() OVER(ORDER BY '+CONVERT (VARCHAR (MAX), @SortExpression)+' '+CONVERT (VARCHAR (MAX), @SortDirection)+')AS ''RowNumber'',* FROM(SELECT tr.[int_Request_ID],          
        tr.[int_User_ID],          
        tr.[int_Project_ID],          
        tr.[str_Request_Type],          
        tr.[int_Account_ID],          
        tr.[int_Requester_ID],          
        tr.[int_User_Head_ID],          
        tr.[dt_Request_Date],          
        tr.[bln_IsApproved],          
        tr.[dt_Approval_Date],          
        tr.[str_Reject_Reason],          
        tr.[int_USER_ROLE],          
        tr.[int_AllocationType_ID],          
        tr.[int_NoofHourInMinute],         
xyz.dbo.GetHourByMin(ISNULL(int_NoofHourInMinute,0)) as ''str_NoofHour'',           
        tr.[dt_StartDateToWork],
        tr.[dt_EndDateToWork],          
        tr.[isAllowToAddTask],          
        tr.[isAllowToDeleteTask],          
        tr.[isAllowToAddCR],          
        tp.str_Project_Name,          
        tu.str_FullName AS str_User_Name,          
        tu1.str_FullName AS UserHeader,         
        tbl_Project_AllocationType.str_AllocationType,    
        tu2.str_FullName AS UserRequester,  
  tu2.str_EMAIL_ADDRESS as RequesterEmail       
  FROM   [tbl_Requests] tr          
  INNER JOIN tbl_PROJECT tp ON tp.int_Project_ID = tr.int_Project_ID          
  INNER JOIN tbl_USER tu ON tu.int_USER_ID=tr.int_User_ID          
  LEFT JOIN tbl_USER tu1 ON tu1.int_USER_ID=tr.int_User_Head_ID          
  INNER JOIN tbl_USER tu2 ON tu2.int_USER_ID=tr.int_Requester_ID    
inner join tbl_Project_AllocationType on   tbl_Project_AllocationType.int_AllocationType_ID=tr.int_AllocationType_ID '+@WhrClause+'
)As Tmp)

  SELECT * FROM 
 AllRecords WHERE RowNumber BETWEEN ' + CONVERT(VARCHAR(MAX), @StartRowIndex) + ' AND '  + CONVERT(VARCHAR(MAX), (@StartRowIndex + @PageRecord - 1)) + '

 SELECT COUNT(TempTbl.int_Request_ID)As  ''ReturnRecords'','+CONVERT(VARCHAR(MAX),@PageIndex)+'''PageIndex''
 FROM (SELECT tr.[int_Request_ID]     
 FROM   [tbl_Requests] tr '+@WhrClause+')as TempTbl;'

PRINT(@SelectClause)
DECLARE @SQL NVARCHAR(MAX)
SET @SQL=CONVERT(NVARCHAR(MAX),@SelectClause)
EXEC sp_executesql @SQL
END

我是这样执行的。

EXEC sp_tbl_REQUEST_SelectAllByFilter_WithPagging 1,20,NULL,NULL,74,591

【问题讨论】:

    标签: sql-server stored-procedures


    【解决方案1】:

    您将 NULL 传递给 @SortExpression@SortDirectionNULL 表示默认值不适用 - 它们为空。

    所以整个连接到@SelectClause 变成NULL(因为连接字符串和NULLs 产生NULLs)

    所以没有执行任何操作。

    试试:

    EXEC sp_tbl_REQUEST_SelectAllByFilter_WithPagging
             1,20,@int_Requester_ID = 74,@intProjectID=591
    

    顺便说一句,您应该避免使用sp_ 作为存储过程的前缀。 sp_ 前缀是 MS 为系统存储过程保留的,如果存在名称冲突,SQL Server 将更喜欢 master 中的系统存储过程而不是您自己的过程。

    (我通常建议不要在 SQL Server 中使用任何前缀,但这更像是一个有争议的问题,而不是一个强有力的规则)

    【讨论】:

      【解决方案2】:

      你好你不需要传参数null

      所以你可以这样执行存储过程

      EXEC sp_tbl_REQUEST_SelectAllByFilter_WithPagging 1,20,@int_Requester_ID=74,@intProjectID=591

      试试这个

      问候 阿米特维亚斯

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多