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

Откуда:
Сообщений: 13
Если убираю это условие, то данные в таблицу заносятся, так что проблема в нем.

WHERE Sellers.ФИО_сотрудника = @ФИО_сотрудника and Shoppers.ФИО_покупателя = @ФИО_покупателя
and Goods.Модель = @Модель

@ФИО_сотрудника @ФИО_покупателя @Модель — параметры, передаваемые из программы хранимой процедуре.
2 июн 17, 10:49    [20533816]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в условии хранимой процедуры  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Lexey7,

Ответ: 42
ну и да, дело в условиях :)
2 июн 17, 10:54    [20533834]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в условии хранимой процедуры  [new]
Lexey7
Member

Откуда:
Сообщений: 13
TaPaK
Lexey7,

Ответ: 42

Это такой сарказм?

Вот код, который обращается к процедуре

using (var sqlConn = new SqlConnection(@"Server=.\sqlexpress;Initial Catalog=Computers;Integrated Security=True"))
{
var sqlCmd = new SqlCommand("InsertSells", sqlConn);
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.AddWithValue("@ФИО_сотрудника", comboBox2.SelectedIndex.ToString());
sqlCmd.Parameters.AddWithValue("@Модель", comboBox1.SelectedIndex.ToString());
sqlCmd.Parameters.AddWithValue("@ФИО_покупателя", comboBox3.SelectedIndex.ToString());
sqlCmd.Parameters.AddWithValue("@Количество", Convert.ToInt32(textBox1.Text));
sqlCmd.Parameters.AddWithValue("@Дата", DateTime.Now);
sqlConn.Open();
sqlCmd.ExecuteNonQuery();
}

Вот сама процедура

USE Computers;

GO
CREATE PROCEDURE InsertSells2
@ФИО_сотрудника nvarchar(50),
@Модель nvarchar(50),
@ФИО_покупателя nvarchar(50),
@Количество int,
@Дата datetime

AS
BEGIN
INSERT INTO Sells (Код_продавца, Код_комплектующего, Код_покупателя, [Дата покупки],
Цена, Количество, Стоимость)
SELECT Sellers.Код_сотрудника, Goods.Код_комплектующего, Shoppers.Код_покупателя,
@Дата, Goods.Цена, @Количество, @Количество * Goods.Цена
FROM Sellers, Goods, Shoppers
WHERE Sellers.ФИО_сотрудника = @ФИО_сотрудника and Shoppers.ФИО_покупателя like @ФИО_покупателя
and Goods.Модель like @Модель

END
2 июн 17, 11:03    [20533865]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в условии хранимой процедуры  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Lexey7,

автор
Это такой сарказм?

нет, это ответ на «Главный вопрос жизни, вселенной и всего такого» В данном случае подходит
2 июн 17, 11:05    [20533877]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в условии хранимой процедуры  [new]
Lexey7
Member

Откуда:
Сообщений: 13
TaPaK
Lexey7,

автор
Это такой сарказм?

нет, это ответ на «Главный вопрос жизни, вселенной и всего такого» В данном случае подходит

Так непонятно в чем проблема?
2 июн 17, 11:13    [20533917]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в условии хранимой процедуры  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Lexey7,

как выглядит этот INSERT на сервере?
Профайлером смотрели?
Сюда скпипастить можете?

Просто интересно: почему фамилия сотрудника сравнивается оператором =,
а фамилия покупателя - оператором LIKE?
Может ли быть так, что часть параметров внутри процедуры равна NULL?
2 июн 17, 11:14    [20533926]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в условии хранимой процедуры  [new]
Lexey7
Member

Откуда:
Сообщений: 13
iap
Lexey7,
Просто интересно: почему фамилия сотрудника сравнивается оператором =,
а фамилия покупателя - оператором LIKE?

Нет, просто забыл убрать этот like, через обычное сравнение не работает тоже.

iap
Lexey7,

как выглядит этот INSERT на сервере?
Профайлером смотрели?
Сюда скпипастить можете?


Это?
SQL:BatchStarting SELECT Код_покупки, [Дата покупки], ФИО_сотрудника, ФИО_покупателя, Цена, Количество, Стоимость FROM dbo.VS .Net SqlClient Data Provider Alexey DESKTOP-4A2752J\Alexey 1352 59 2017-06-02 11:39:38.047
SQL:BatchCompleted SELECT Код_покупки, [Дата покупки], ФИО_сотрудника, ФИО_покупателя, Цена, Количество, Стоимость FROM dbo.VS .Net SqlClient Data Provider Alexey DESKTOP-4A2752J\Alexey 0 39 0 9 1352 59 2017-06-02 11:39:38.047 2017-06-02 11:39:38.057
2 июн 17, 11:40    [20534027]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в условии хранимой процедуры  [new]
Lexey7
Member

Откуда:
Сообщений: 13
Всё, нашёл свою ошибку.
2 июн 17, 11:48    [20534075]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в условии хранимой процедуры  [new]
ПаWWWлОдАрЕц
Member

Откуда: NSK-PVL
Сообщений: 135
Lexey7
TaPaK
Lexey7,

пропущено...

нет, это ответ на «Главный вопрос жизни, вселенной и всего такого» В данном случае подходит

Так непонятно в чем проблема?


С позволения уважаемого TaPak покажу ТСу ответ на его вопрос -> 42
2 июн 17, 12:04    [20534155]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в условии хранимой процедуры  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Lexey7
Это?
SQL:BatchStarting SELECT Код_покупки, [Дата покупки], ФИО_сотрудника, ФИО_покупателя, Цена, Количество, Стоимость FROM dbo.VS .Net SqlClient Data Provider Alexey DESKTOP-4A2752J\Alexey 1352 59 2017-06-02 11:39:38.047
SQL:BatchCompleted SELECT Код_покупки, [Дата покупки], ФИО_сотрудника, ФИО_покупателя, Цена, Количество, Стоимость FROM dbo.VS .Net SqlClient Data Provider Alexey DESKTOP-4A2752J\Alexey 0 39 0 9 1352 59 2017-06-02 11:39:38.047 2017-06-02 11:39:38.057
Должно быть что-то похожее на показанный вами INSERT,
только с конкретными значениями параметров.
Перед запуском профайлера надо его настроить, чтобы показывал пошаговое выполнение текста процедуры.

И какая же была ошибка?
2 июн 17, 12:13    [20534206]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в условии хранимой процедуры  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31326
iap
Lexey7
Это?
SQL:BatchStarting SELECT Код_покупки, [Дата покупки], ФИО_сотрудника, ФИО_покупателя, Цена, Количество, Стоимость FROM dbo.VS .Net SqlClient Data Provider Alexey DESKTOP-4A2752J\Alexey 1352 59 2017-06-02 11:39:38.047
SQL:BatchCompleted SELECT Код_покупки, [Дата покупки], ФИО_сотрудника, ФИО_покупателя, Цена, Количество, Стоимость FROM dbo.VS .Net SqlClient Data Provider Alexey DESKTOP-4A2752J\Alexey 0 39 0 9 1352 59 2017-06-02 11:39:38.047 2017-06-02 11:39:38.057
Должно быть что-то похожее на показанный вами INSERT,
только с конкретными значениями параметров.
Перед запуском профайлера надо его настроить, чтобы показывал пошаговое выполнение текста процедуры.

И какая же была ошибка?
Да запрос же бредовый.
Что за кросс-джойн между тремя таблицами???

Lexey7
Вот сама процедура
INSERT INTO Sells (Код_продавца, Код_комплектующего, Код_покупателя, [Дата покупки],
	 Цена, Количество, Стоимость)
SELECT Sellers.Код_сотрудника, Goods.Код_комплектующего, Shoppers.Код_покупателя,
	 @Дата, Goods.Цена, @Количество, @Количество * Goods.Цена
FROM Sellers, Goods, Shoppers
WHERE Sellers.ФИО_сотрудника = @ФИО_сотрудника and Shoppers.ФИО_покупателя like @ФИО_покупателя 
		 and Goods.Модель like @Модель
3 июн 17, 00:21    [20536416]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в условии хранимой процедуры  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
alexeyvg
Да запрос же бредовый.
Что за кросс-джойн между тремя таблицами???
Если в WHERE на каждую накладывается условие,
оставляющее одну запись, то ведь ничего страшного?
3 июн 17, 11:42    [20536722]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в условии хранимой процедуры  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31326
iap
alexeyvg
Да запрос же бредовый.
Что за кросс-джойн между тремя таблицами???
Если в WHERE на каждую накладывается условие,
оставляющее одну запись, то ведь ничего страшного?
В общем да, но вообще так не пишут.

Смотрите: в интерфейсе показывается справочник, в нём мы выбираем из списка сотрудников, покупателей, модели.
Выбираем почему то не их ИД, а названия (кстати, а есть уникальный констрейн на эти поля?).
Потом вызываем процедуру, в которой по именам выковыриваем ИД и вставляем в таблицу.
Сколько там записей выберется, уникальны ли значения, непонятно. Как там передаются названия, неизвестно.

В общем, такой код может правильно отработать, но точно это сказать нельзя.
3 июн 17, 13:16    [20536799]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить