我有4个标准可能有也可能没有值如何根据此标准编写过程来获取数据

时间:2014-05-29 06:56:45

标签: sql sql-server search conditional

我有4个标准可能有也可能没有值如何根据此标准编写过程来获取数据。

这些条件可能包含值或可能包含空字符串。如果它们有空字符串,我需要完全消除条件并获取完整数据。

我如何在sql server中执行此操作。

2 个答案:

答案 0 :(得分:1)

一般形式是使用默认值(如NULL)创建参数 并测试如下:

create procedure MyProc
(
    @param1 int = NULL,
    @param2 int = NULL
)
AS

SELECT
    <columnlist>
FROM
    <tablename>
WHERE
    (@param1 IS NULL OR SomeColumn = @param1) AND
    (@param2 IS NULL OR SomeColumn = @param2)

请注意,这可能导致无助的参数嗅探,特别是对于大量参数。

答案 1 :(得分:0)

CREATE PROCEDURE <Procedure_Name>
(
     @param1 VARCHAR(100) = NULL,
     @param2 INT = NULL
)
AS
BEGIN

     IF ((@param1 IS NOT NULL) AND (LEN(LTRIM(RTRIM(@param1))) = 0))
     BEGIN
          SET @param1 = NULL
     END

     IF ((@param2 IS NOT NULL) AND (@param2 = -1))
     BEGIN
          SET @param2 = NULL
     END

     SELECT *
     FROM <Table_Name>
     WHERE (@param1 IS NULL OR Column_1 LIKE '%' + @param1 + '%'
     AND (@param2 IS NULL OR Column_2 = @param2)
END

PS:您可以根据需要删除/修改INT验证。我曾经进行过此检查,因为我的应用程序从不为Id列发送负值,但仅在我无法为int数据类型发送null的情况下。