我有4个标准可能有也可能没有值如何根据此标准编写过程来获取数据。
这些条件可能包含值或可能包含空字符串。如果它们有空字符串,我需要完全消除条件并获取完整数据。
我如何在sql server中执行此操作。
答案 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的情况下。