Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 存储过程仅返回带2个参数的结果_Sql Server 2008_Stored Procedures - Fatal编程技术网

Sql server 2008 存储过程仅返回带2个参数的结果

Sql server 2008 存储过程仅返回带2个参数的结果,sql-server-2008,stored-procedures,Sql Server 2008,Stored Procedures,大家好,下面是我的代码 USE [arrestedpersonsdb] GO /****** Object: StoredProcedure [dbo].[stnencodedtodisplay] Script Date: 08/11/2013 11:18:32 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Autho

大家好,下面是我的代码

USE [arrestedpersonsdb]
GO
/****** Object:  StoredProcedure [dbo].[stnencodedtodisplay]    Script Date: 08/11/2013 11:18:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[stnencodedtodisplay]
(
      @PageIndex INT = 1
      ,@PageSize INT = 10
      ,@RecordCount INT OUTPUT 
      ,@id int
      ,@fname varchar
      ,@lname varchar
    )
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here

      SELECT ROW_NUMBER() OVER
      (
            ORDER BY [fname] ASC
      )AS RowNumber
      ,[pid]
      ,[fname]
      ,[mname]
      ,[lname]
      ,[qualifier]
      ,[alias]

      INTO #Results
      FROM [todisplay]
      where (stnid = @id) and (type = 'STN')  and (fname = @fname or @fname = '') and (          lname = @lname or @lname = '')
      SELECT @RecordCount = COUNT(*)
      FROM #Results

      SELECT * FROM #Results
      WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1

      DROP TABLE #Results
END
但当我将'ALDRIN'作为@fname的参数传递时,它返回零
我的语法有问题吗?

这可能是caps问题。如果是这样的话,那么下面将解决它:

(upper(fname) = upper(@fname) or @fname = '') and 
(upper(lname) = upper(@lname) or @lname = '')
或者它可能是一个空白问题,在这种情况下,下面将解决它

(rtrim(ltrim(fname)) = rtrim(ltrim(@fname)) or @fname = '') and 
(rtrim(ltrim(lname)) = rtrim(ltrim(@lname)) or @lname = '')

或者两者都有。

您尚未指定varchar参数的大小

  ,@fname varchar
  ,@lname varchar
不这样做会给你一个尺寸

  ,@fname varchar(1)
  ,@lname varchar(1)
在你的情况下,选择合适的方式

  ,@fname varchar(100)
  ,@lname varchar(100)

我可能会迟到,但解决问题的另一个选择是尝试以下方法:

SELECT ROW_NUMBER() OVER
  (
        ORDER BY [fname] ASC
  )AS RowNumber
  ,[pid]
  ,[fname]
  ,[mname]
  ,[lname]
  ,[qualifier]
  ,[alias]

  INTO #Results
  FROM [todisplay]
  where stnid = @id 
    and type = 'STN'  
    AND CASE WHEN  @fname =''
          THEN 'True' 
          ELSE fname 
            END  = CASE WHEN   @fname ='' 
                    THEN 'True' 
                    ELSE @fname 
            END 
    AND CASE WHEN  @lname =''
          THEN 'True' 
          ELSE lname 
            END  = CASE WHEN   @lname ='' 
                    THEN 'True' 
                    ELSE @lname 
            END  
在当前的try设置中,将ANSI_NULL设置为OFF


希望能有所帮助。

我尝试了这两种方法,但仍然不起作用。我发布了我正在查询的视图,以便更清晰。我无法将其发布在此处,因为它太长,但这是我唯一的问题。如果我在fname或上传递值,它将不会返回任何结果lname@user2334366-直接使用SQL Management Studio执行select语句时会发生什么情况?i尝试忽略lname并尝试仅使用fname,但它仍然不会返回任何我尝试执行sp时返回的内容。使用sql managemet将结果从[todisplay]中输入,其中stnid=1599,type='STN',fname='ALDRIN'显示一行affected@fname瓦查尔50,@lname varchar50我把它设为50还是一样的result@angelogogo您确定表中有与where子句匹配的行吗?是的,我在management studio上尝试了它,执行查询时它返回了1行。在存储过程中,如果我不在fname和lname上传递任何值,则包含id 1599的所有行都将返回,但传递额外的值为lname的参数fname,具有相同id返回zeroALDRIN DETABLAN MALABREG JR TUGUE 1 81 1599 STN nXOUBfAWYzssbzlaEclI这里是管理工作室id为1599的结果,ALDRINi的fname设法使其工作我从我的视图中忽略了其他结果,如1和81,代表regid和ppoid我不知道确切的结果原因,但它起作用了。无论如何,谢谢。好吧,你真的有一个fname的名字等于奥尔德林的行吗??在我看来,这更可能是一个姓氏-不??是的,我确实有..我省略了与结果无关的其他列,从而使它起作用谢谢你的答案我会把它放在我的参考资料上
SELECT ROW_NUMBER() OVER
  (
        ORDER BY [fname] ASC
  )AS RowNumber
  ,[pid]
  ,[fname]
  ,[mname]
  ,[lname]
  ,[qualifier]
  ,[alias]

  INTO #Results
  FROM [todisplay]
  where stnid = @id 
    and type = 'STN'  
    AND CASE WHEN  @fname =''
          THEN 'True' 
          ELSE fname 
            END  = CASE WHEN   @fname ='' 
                    THEN 'True' 
                    ELSE @fname 
            END 
    AND CASE WHEN  @lname =''
          THEN 'True' 
          ELSE lname 
            END  = CASE WHEN   @lname ='' 
                    THEN 'True' 
                    ELSE @lname 
            END