【发布时间】:2014-07-07 07:53:46
【问题描述】:
我有以下存储过程:
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
它不返回任何东西。
我做错了什么? 提前致谢。
【问题讨论】:
-
您应该在这些 varchar 参数上指定长度 - 我怀疑因为省略了这些参数,所以参数的大小只有 1 个字符。
-
Bad habits to kick : declaring VARCHAR without (length) - 您应该始终为您使用的任何
varchar变量和参数提供长度
标签: sql sql-server select stored-procedures