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或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮({}
),以很好地格式化和语法突出显示它!