Joh*_*son 25 sql database stored-procedures sql-server-2008
我有一个存储过程,它基于4个参数从表中获取信息.
我想根据参数获取值,但如果参数为NULL,则不检查该参数.因此,如果所有4个参数都为null,我将显示整个表.
这是我的SP(如您所见,这仅适用于1个参数atm):
CREATE PROCEDURE myProcedure
@Param1 nvarchar(50),
@Param2 nvarchar(50),
@Param3 nvarchar(50),
@Param4 nvarchar(50)
AS
BEGIN
IF(@Param1 IS NULL)
BEGIN
SELECT Id, col1, col2, col3, col4 FROM myTable
END
ELSE
BEGIN
SELECT Id, col1, col2, col3, col4 FROM myTable WHERE col1 LIKE @Param1+'%'
END
END
Run Code Online (Sandbox Code Playgroud)
如果没有IF针对每种可能的组合(15个IF),有没有办法做到这一点?
Adr*_*der 43
怎么样的
SELECT Id, col1, col2, col3, col4
FROM myTable
WHERE col1 LIKE @Param1+'%'
OR @Param1 IS NULL
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下你也可以使用
SELECT Id, col1, col2, col3, col4
FROM myTable
WHERE col1 LIKE ISNULL(@Param1,'')+'%'
Run Code Online (Sandbox Code Playgroud)
但总的来说,你可以尝试类似的东西
SELECT Id, col1, col2, col3, col4
FROM myTable
WHERE (condition1 OR @Param1 IS NULL)
AND (condition2 OR @Param2 IS NULL)
AND (condition3 OR @Param3 IS NULL)
...
AND (conditionN OR @ParamN IS NULL)
Run Code Online (Sandbox Code Playgroud)
Aam*_*mir 10
您可以使用COALESCE()SQL Server 中的 use 函数。您不需要在语句中使用IF- Elseor 。CASE以下是如何使用COALESCE函数。
SELECT Id, col1, col2, col3, col4 FROM myTable where col1 = COALESCE(NULLIF(@param1, ''), col1) and col2 = COALESCE(NULLIF(@param2, ''), col2) and col3 = COALESCE(NULLIF(@param3, ''), col3) and col4=
COALESCE(NULLIF(@param4, ''), col4)
Run Code Online (Sandbox Code Playgroud)
SQL 中的函数COALESCE返回其参数中的第一个非 NULL 表达式。例如,如果 @param1 等于 null,函数将返回 col1,这将导致 where 语句中的 col1=col1,就像 1=1 意味着条件始终为 true。
CREATE PROCEDURE myProcedure
@Param1 nvarchar(50),
@Param2 nvarchar(50),
@Param3 nvarchar(50),
@Param4 nvarchar(50)
AS
BEGIN
IF(@Param1 IS NULL)
BEGIN
SELECT Id, col1, col2, col3, col4 FROM myTable
END
ELSE
BEGIN
SELECT Id, col1, col2, col3, col4 FROM myTable WHERE col1 LIKE @Param1+'%' OR @Param1 is Null
END
END
Run Code Online (Sandbox Code Playgroud)
这应该有帮助
问候
阿苏托什·艾莉亚
如果您的意思是 @param1 是 col1 的参数,@param2 是 col2 的参数,...等您可以尝试以下操作:
CREATE PROCEDURE myProcedure
@Param1 nvarchar(50),
@Param2 nvarchar(50),
@Param3 nvarchar(50),
@Param4 nvarchar(50)
AS
BEGIN
declare @query nvarchar(4000)
SET @query='SELECT Id, col1, col2, col3, col4 FROM myTable '+
(case when ((@Param1 is null) and (@Param2 is null) and (@Param3 is null) and (@Param4 is null))
then ''
else
'where '+
(case when @Param1 is not null
then ' col1 like '''+@param1+'%'''+
(case when @param2 is not null then ' AND ' else '' end)
else '' end)+
(case when @Param2 is not null
then ' col2 like '''+@param2+'%'''+
(case when @param3 is not null then ' AND ' else '' end)
else '' end)+
(case when @Param3 is not null
then ' col3 like '''+@param3+'%'''+
(case when @param4 is not null then ' AND ' else '' end)
else '' end)+
(case when @Param4 is not null
then ' col4 like '''+@param4+'%'''
else '' end)
end)
exec sp_sqlexec @query
Run Code Online (Sandbox Code Playgroud)