Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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 客户搜索存储过程_Sql_Tsql_Sql Server 2008 - Fatal编程技术网

Sql 客户搜索存储过程

Sql 客户搜索存储过程,sql,tsql,sql-server-2008,Sql,Tsql,Sql Server 2008,我正在编写一个客户搜索存储过程,其中有三个参数firstname、lastname、fathername都是varchar 我写的如下: CREATE PROCEDURE [dbo].[SearchCustomer] ( @p_FirstName varchar = NULL ,@p_LastName varchar = NULL ,@p_FatherFirstName varchar = NULL ) AS BEGIN SET NOCOUNT ON SELECT

我正在编写一个客户搜索存储过程,其中有三个参数
firstname、lastname、fathername
都是
varchar

我写的如下:

CREATE PROCEDURE [dbo].[SearchCustomer] 
(  
  @p_FirstName varchar = NULL
  ,@p_LastName varchar = NULL
  ,@p_FatherFirstName varchar = NULL
)
AS 
BEGIN 
  SET NOCOUNT ON 
  SELECT [CustomerID]
        ,[CustomerTitle]
        ,[FirstName]
        ,[MiddleName]
        ,[LastName]
        ,[FatherFirstName]
        ,[EmailId]
     FROM [Customer] 
       WHERE [FirstName] LIKE COALESCE(@p_FirstName,'%')     
      OR [LastName] LIKE COALESCE @p_LastName,'%')
      OR [FatherFirstName] LIKE COALESCE(@p_FatherFirstName,'%')
  END
我使用可选参数是因为如果没有参数值,我需要在没有任何条件的情况下获得完整列表,但是当我只给出第一个名称时,我只需要那些与该条件匹配的行,而不是其余的行,但现在它列出了所有行

我想问题出在附近或附近

你能帮忙吗

如果我更改或更改为和

现在如果我把名字改成“abc”,姓和父亲的名字改成黑色

我得到了所有的列表,包括“abc”作为名字


我只需要名为“abc”的行,而不需要其余的

使用where子句,如下面的示例所示

 WHERE (@p_FirstName=''  or [FirstName] LIKE COALESCE(@p_FirstName,'%'))     
      OR (@p_LastName='' or [LastName] LIKE COALESCE @p_LastName,'%'))
      OR (@p_FatherFirstName='' or [FatherFirstName] LIKE COALESCE(@p_FatherFirstName,'%'))
并使用以下语法设置所有参数“”,如果它们为NULL

SET @p_FirstName=ISNULL(@p_FirstName,'')

使用where子句,如下例所示

 WHERE (@p_FirstName=''  or [FirstName] LIKE COALESCE(@p_FirstName,'%'))     
      OR (@p_LastName='' or [LastName] LIKE COALESCE @p_LastName,'%'))
      OR (@p_FatherFirstName='' or [FatherFirstName] LIKE COALESCE(@p_FatherFirstName,'%'))
并使用以下语法设置所有参数“”,如果它们为NULL

SET @p_FirstName=ISNULL(@p_FirstName,'')

这将根据提交的参数筛选行:

CREATE PROCEDURE [dbo].[SearchCustomer] 
(  
  @p_FirstName varchar(50) = NULL
 ,@p_LastName varchar(50) = NULL
 ,@p_FatherFirstName varchar(50) = NULL
)
AS 
BEGIN 

  SET NOCOUNT ON 
  SELECT [CustomerID]
        ,[CustomerTitle]
        ,[FirstName]
        ,[MiddleName]
        ,[LastName]
        ,[FatherFirstName]
        ,[EmailId]
     FROM [Customer] 
   WHERE [FirstName] LIKE COALESCE(@p_FirstName + '%', FirstName)     
   AND [LastName] LIKE COALESCE (@p_LastName + '%', LastName)
   AND [FatherFirstName] LIKE COALESCE(@p_FatherFirstName + '%', FatherFirstName)
  END
GO

这将根据提交的参数筛选行:

CREATE PROCEDURE [dbo].[SearchCustomer] 
(  
  @p_FirstName varchar(50) = NULL
 ,@p_LastName varchar(50) = NULL
 ,@p_FatherFirstName varchar(50) = NULL
)
AS 
BEGIN 

  SET NOCOUNT ON 
  SELECT [CustomerID]
        ,[CustomerTitle]
        ,[FirstName]
        ,[MiddleName]
        ,[LastName]
        ,[FatherFirstName]
        ,[EmailId]
     FROM [Customer] 
   WHERE [FirstName] LIKE COALESCE(@p_FirstName + '%', FirstName)     
   AND [LastName] LIKE COALESCE (@p_LastName + '%', LastName)
   AND [FatherFirstName] LIKE COALESCE(@p_FatherFirstName + '%', FatherFirstName)
  END
GO

如果定义了
VARCHAR
参数,则应始终指定该字符串的长度!因此,请使用
VARCHAR(50)
或任何对您有意义的方法-否则,您的输入可能会被截断…我认为您应该在AND中更改或。如果您定义
VARCHAR
参数-您应该始终为该字符串指定长度!因此,请使用
VARCHAR(50)
或任何对您有意义的方法-否则,您的输入可能会被截断…我认为您应该在和中更改或。如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击“代码示例”按钮(
{}
)在编辑器工具栏上很好地格式化和语法突出显示它!如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!