使用SELECT和NULLS存储过程

时间:2014-07-07 07:53:46

标签: sql sql-server select stored-procedures

我有以下存储过程:

ALTER PROCEDURE [dbo].[SearchProfile]

(
@Type varchar,
@Name varchar
)

AS
SELECT * 
FROM dbo.Profiles 
WHERE ((@Type IS NULL) 
 OR (dbo.Profiles.Type = @Type)) 
 AND  ((@Name IS NULL) 
 OR (Name = @Name));

当我执行以下操作时:

exec SearchProfile NULL, NULL

它返回所有行,但是当我将其中一个NULL更改为某个值时...

exec SearchProfile 'abc', NULL

它不会返回任何内容。

我做错了什么? 提前谢谢。

1 个答案:

答案 0 :(得分:3)

您需要指定变量的长度。

如果你跑

DECLARE @Type varchar = 'abc'

SELECT @Type

返回

a

因此将其更改为

@Type varchar(50),
@Name varchar(50)

SQL Fiddle DEMO