相关疑难解决方法(0)

如何在T-SQL存储过程中使用可选参数?

我正在创建一个存储过程来搜索表.我有许多不同的搜索字段,所有这些字段都是可选的.有没有办法创建一个存储过程来处理这个?假设我有一个包含四个字段的表:ID,FirstName,LastName和Title.我可以这样做:

CREATE PROCEDURE spDoSearch
    @FirstName varchar(25) = null,
    @LastName varchar(25) = null,
    @Title varchar(25) = null
AS
    BEGIN
        SELECT ID, FirstName, LastName, Title
        FROM tblUsers
        WHERE
            FirstName = ISNULL(@FirstName, FirstName) AND
            LastName = ISNULL(@LastName, LastName) AND
            Title = ISNULL(@Title, Title)
    END
Run Code Online (Sandbox Code Playgroud)

这种作品.但是它会忽略FirstName,LastName或Title为NULL的记录.如果未在搜索参数中指定Title,我想包含Title为NULL的记录 - 对于FirstName和LastName是相同的.我知道我可以用动态SQL做到这一点,但我想避免这种情况.

t-sql optional-parameters

179
推荐指数
5
解决办法
31万
查看次数

SQL中的WHERE子句中的LIKE和NULL

我有一个商店程序,我计划用于搜索并获取所有值.

场景: 如果传递的参数是NULL它应该返回表的所有值,如果传递的参数不是,NULL它应该根据LIKE中的条件返回值.

//查询:

ALTER procedure [dbo].[usp_GetAllCustomerDetails]
(
@Keyword nvarchar(20) =  null
)
As
Begin

Select CustomerId,CustomerName,CustomerTypeName,CustomerCode,CategoryName,CustomerMobile,CustomerEmail,CustomerAddress,CustomerCity,CustomerState,Pincode
from tblCustomerMaster CM
inner join dbo.tblCustomerTypeMaster CTM on CTM.CustomerTypeId = CM.CustomerType
inner join dbo.tblCategoryMaster CCM on CCM.CategoryId= CM.CustomerCategory
where CustomerName like '%'+@Keyword+'%' 
Run Code Online (Sandbox Code Playgroud)

在上面的查询,当我执行,因为没有返回值NULL被假定为string通过SQL,所以我应该怎么了在写where子句,以获得所需的输出?

sql sql-server where-clause sql-server-2008 sql-like

13
推荐指数
1
解决办法
3万
查看次数