#sql #sql-server #select #stored-procedures
#sql #sql-сервер #выберите #хранимые процедуры
Вопрос:
У меня есть следующая хранимая процедура:
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. Вы должны указать длины для этих параметров varchar — я подозреваю, что, поскольку это опущено, параметры имеют размер всего 1 символ.
2. Вредные привычки, от которых следует отказаться: объявление VARCHAR без (length) — вы должны всегда указывать длину для любых
varchar
переменных и параметров, которые вы используете
Ответ №1:
Вам нужно указать длину переменных.
Если вы запустите
DECLARE @Type varchar = 'abc'
SELECT @Type
Она возвращает
a
Поэтому измените ее на что-то вроде
@Type varchar(50),
@Name varchar(50)