Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с Хранимой Процедурей  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Добрый день, ребята.
Такая проблема: Написал Процедуру для поиска, все вроде в порядке, но проблема в том, что когда я задаю 1 параметр поиска а все остальные задаю NULL, она не работает и еще, когда выбираю несколько из параметров для поиска, тоже не работает.
Помогите, пожалуйста!
Вот код:

ALTER PROCEDURE [dbo].[Credit_History_Search] 
(
	@groupID int = NULL,
	@clientID int = NULL,
	@amount_of_credit_start nvarchar (12) = '',
	@amount_of_credit_end nvarchar (12) = '',
	@issue_date_start datetime = NULL,
	@issue_date_end datetime = NULL,
	@repayment_date_start datetime = NULL,
	@repayment_date_end datetime = NULL
)
	
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for procedure here
	SELECT 
		[Credits].[ID],
		[Clients].[FullName],
		[Groups].[GroupName],
		[Credits].[Amount_of_credit],
		[Credits].[Issue_date],
		[Credits].[Repayment_date]
	FROM
		[dbo].[Credits] INNER JOIN 
		[dbo].[Clients] ON [Clients].[ID] = [Credits].[ClientID] INNER JOIN
		[dbo].[Groups] ON [Groups].[ID] = [Clients].[GroupID]
	WHERE
		([Groups].[ID] = @groupID OR @groupID = NULL ) AND
		([Clients].[ID] = @clientID OR @clientID = NULL) AND
		([Credits].[Amount_of_credit] >= @amount_of_credit_start OR @amount_of_credit_start IS NULL) AND
		([Credits].[Amount_of_credit] <= @amount_of_credit_end OR @amount_of_credit_end IS NULL) AND
		([Credits].[Issue_date] >= @issue_date_start OR @issue_date_start IS NULL) AND
		([Credits].[Issue_date] <= @issue_date_end OR @issue_date_end IS NULL) AND
		([Credits].[Repayment_date] >= @repayment_date_start OR @repayment_date_start IS NULL) AND 
		([Credits].[Repayment_date] <= @repayment_date_end OR @repayment_date_end IS NULL);

END


Сообщение было отредактировано: 7 апр 14, 16:03
7 апр 14, 15:59    [15844541]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Хранимой Процедурей  [new]
Кавказ-сила
Member

Откуда: Москва
Сообщений: 261
adimmat
@groupID = NULL
7 апр 14, 16:01    [15844578]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Хранимой Процедурей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
"Не рботает" - это сообщение об ошибке?
7 апр 14, 16:03    [15844597]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Хранимой Процедурей  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Гавриленко Сергей Алексеевич,
Нет. Никаких синтаксических ошибок не выдает, просто не выводит никакого результата!
7 апр 14, 16:06    [15844622]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Хранимой Процедурей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Код вызова покажите.

И вот это точно должно быть вот так

	@amount_of_credit_start nvarchar (12) = '',
	@amount_of_credit_end nvarchar (12) = '',

а не вот так:
	@amount_of_credit_start nvarchar (12) = null,
	@amount_of_credit_end nvarchar (12) = null,


?

Сообщение было отредактировано: 7 апр 14, 16:12
7 апр 14, 16:09    [15844647]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Хранимой Процедурей  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Гавриленко Сергей Алексеевич,

К сообщению приложен файл. Размер - 145Kb
7 апр 14, 16:13    [15844684]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Хранимой Процедурей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Не надо больше картинок, все можно показать текстом.

По картинке можно сказать, что у вас или нет группы с идентификатором 1, или у этой группы нет клиентов, или у этих клиентов нет кредитов.
7 апр 14, 16:14    [15844706]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Хранимой Процедурей  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Гавриленко Сергей Алексеевич,
Все таблицы заполнены и в них есть данные. Если я убрать все параметры, кроме первых двух, все нормально работает, именно, когда я добавляю 3 и 4 параметры (amount_date_start и amount_date_end) начинаются эти проблемы.
7 апр 14, 16:19    [15844749]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Хранимой Процедурей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
adimmat
Гавриленко Сергей Алексеевич,
Все таблицы заполнены и в них есть данные. Если я убрать все параметры, кроме первых двух, все нормально работает, именно, когда я добавляю 3 и 4 параметры (amount_date_start и amount_date_end) начинаются эти проблемы.
Я е сомневаюсь. Но для группы 1 я готов еще раз скопипастить свое утверждение: "или нет группы с идентификатором 1, или у этой группы нет клиентов, или у этих клиентов нет кредитов". Выяснять, что именно у вас из этих трех пунктов, вам.

Сообщение было отредактировано: 7 апр 14, 16:23
7 апр 14, 16:22    [15844777]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Хранимой Процедурей  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Гавриленко Сергей Алексеевич,
Вот, что выводит на запрос:
SELECT
[Credits].[ID],
[Clients].[FullName],
[Groups].[GroupName],
[Credits].[Amount_of_credit],
[Credits].[Issue_date],
[Credits].[Repayment_date]
FROM
[dbo].[Credits] INNER JOIN
[dbo].[Clients] ON [Clients].[ID] = [Credits].[ClientID] INNER JOIN
[dbo].[Groups] ON [Groups].[ID] = [Clients].[GroupID]

К сообщению приложен файл. Размер - 41Kb
7 апр 14, 16:35    [15844909]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Хранимой Процедурей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
И теперь в том же коннекте

sp_helptext '[dbo].[Credit_History_Search]'
7 апр 14, 16:37    [15844934]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Хранимой Процедурей  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8826
adimmat,
declare @id int = null, @test int = null
if 1 = 1 and (@id = null or @test = null)
	print 'ok'
else
	print 'bad'


Теперь понятно, что происходит при сравнении значения с NULL?
7 апр 14, 16:47    [15845009]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Хранимой Процедурей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Кавказ-сила
adimmat
@groupID = NULL

Ну да, я почему-то подумал, что комментарий к шапке процедуры относится.

2Автор:

([Groups].[ID] = @groupID OR @groupID IS NULL ) AND
([Clients].[ID] = @clientID OR @clientID IS NULL) AND


Сообщение было отредактировано: 7 апр 14, 17:03
7 апр 14, 17:03    [15845082]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить