Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
A.V.O.I.D Member Откуда: Сообщений: 17 |
Create Table Receiving (id_Declare varchar(15) NOT NULL Primary Key, id_Goods varchar(15) NOT NULL, id_Creator varchar(15) NOT NULL, Price varchar(15) NOT NULL, Number varchar(5) NOT NULL) Есть таблица - Получение товара. Дело в том, что на каждую накладную можно добавить несколько товаров. А у меня в бд не выходит это сделать, т.к. id_Declare(айди_накладной) ключ.поле и когда я пытаюсь добавить запись с таким же id_Declare, ошибка. Сообщение 2627, уровень 14, состояние 1, строка 1 Нарушено "PK__Receivin__D6AFFC7032742A8C" ограничения PRIMARY KEY. Не удается вставить повторяющийся ключ в объект "dbo.Receiving". Повторяющееся значение ключа: (1). Выполнение данной инструкции было прервано. Что делать? Я полнейший чайник в SQL, как делать триггеры и процедуры не знаю. Очень нужна ваша помощь |
11 июн 15, 17:23 [17761625] Ответить | Цитировать Сообщить модератору |
SQL2008 Member Откуда: Москва Сообщений: 4391 |
Приведите здесь текст скрипта, вставляющий записи. Оформите только как код. |
11 июн 15, 17:33 [17761667] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37138 |
Create Table Receiving( id_Declare varchar(15) NOT NULL, id_Goods varchar(15) NOT NULL, id_Creator varchar(15) NOT NULL, Price varchar(15) NOT NULL, Number varchar(5) NOT NULL , primary key ( id_Declare , id_Goods ) ) |
11 июн 15, 17:36 [17761684] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
A.V.O.I.D, именно в вашу таблицу в одну накладную можно добавить только один товар. потому что или 2 таблицы надо иметь: для накладных и для товаров, или убирайте ПК |
11 июн 15, 17:37 [17761686] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
ага, теперь скажет, а у меня надо 2 раза товар по разной цене добавить, т.к. сперва взяли 1 на пробу, откупорили, одобрили, решили 10000 взять, они уже по оптовой цене прошли, а ту одну уже в накладную внесли и отмена не предусмотрена Price varchar(15), Number varchar(5) -- это круто, когда их перемножите, автоматом получите сумму прописью |
||
11 июн 15, 17:47 [17761722] Ответить | Цитировать Сообщить модератору |
A.V.O.I.D Member Откуда: Сообщений: 17 |
o-o, сейчас я могу в свою таблицу Receiving добавить только 1 товар с id_Declare - "1". Следующий товар можно добавить только с id_Declare-"2". А мне надо сделать так, что бы я мог добавить товар 2 с id_Declare -"2" и т.д. Гавриленко Сергей Алексеевич, Просто заново создать таблицу? с этим кодом? SQL2008, USE ITStore GO INSERT INTO Receiving VALUES ('1', '1', '101','750','2'); GO USE ITStore GO INSERT INTO Receiving VALUES ('1', '1', '101','750','2'); GO USE ITStore GO INSERT INTO Receiving VALUES ('2', '2', '102','1250','2'); GO USE ITStore GO INSERT INTO Receiving VALUES ('3', '3', '103','750','2'); GO USE ITStore GO INSERT INTO Receiving VALUES ('4', '4', '101','1350','1'); GO USE ITStore GO INSERT INTO Receiving VALUES ('5', '5', '105','750','2'); GO |
11 июн 15, 17:56 [17761764] Ответить | Цитировать Сообщить модератору |
A.V.O.I.D Member Откуда: Сообщений: 17 |
o-o, сейчас я могу в свою таблицу Receiving добавить только 1 товар с id_Declare - "1". Следующий товар можно добавить только с id_Declare-"1". А мне надо сделать так, что бы я мог добавить товар 2 с id_Declare -"2" и т.д. |
11 июн 15, 18:00 [17761779] Ответить | Цитировать Сообщить модератору |
A.V.O.I.D Member Откуда: Сообщений: 17 |
o-o, сейчас я могу в свою таблицу Receiving добавить только 1 товар с id_Declare - "1". Следующий товар можно добавить только с id_Declare-"2". А мне надо сделать так, что бы я мог добавить товар 2 с id_Declare -"1" и т.д. прошу прощения, не могу исправить прошлое сообщение |
11 июн 15, 18:03 [17761789] Ответить | Цитировать Сообщить модератору |
msLex Member Откуда: Сообщений: 8694 |
![]() ![]() ![]() |
||
11 июн 15, 18:09 [17761820] Ответить | Цитировать Сообщить модератору |
A.V.O.I.D Member Откуда: Сообщений: 17 |
Простите, сменить на другой тип данных нужно? |
11 июн 15, 18:17 [17761846] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
A.V.O.I.D, да, причем ВСЕМ полям надо поменять тип данных. |
11 июн 15, 18:20 [17761858] Ответить | Цитировать Сообщить модератору |
A.V.O.I.D Member Откуда: Сообщений: 17 |
Minamoto, А почему всем? О_о Разве не цену и кол-во только? |
11 июн 15, 18:51 [17761937] Ответить | Цитировать Сообщить модератору |
085
Guest |
ТС Вы хоть понимаете какой гемарой будет в работе с неправельно выбранным форматом данных, только не говорите что на клиентской части все благополучно разрулите. Всегда храните данные в БД в том типе данных который преднозначен для них. |
11 июн 15, 19:01 [17761971] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
Например, почему id_Declare имеет тип varchar(15)? Как вы себе представляете это, как вы будете вставлять новые записи? |
||
11 июн 15, 20:58 [17762393] Ответить | Цитировать Сообщить модератору |
A.V.O.I.D Member Откуда: Сообщений: 17 |
alexeyvg, я уже исправил. Сделал все, что надо) Спасибо за помощь) Теперь и добавляются) Но появилась новая проблема. Есть заполненая таблица Receiving. При исполнении процедуры, выбивает ошибку(ниже процедуры). Как исправить?Как сделать через апдейт? SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= CREATE PROCEDURE Receiving -- Add the parameters for the stored procedure here @id_Declare int, @id_Goods int, @id_Creator int, @Price int, @Number int AS declare @v_id integer DECLARE cur_cust_id CURSOR FOR SELECT MAX(id_Declare) FROM dbo.Receiving BEGIN open cur_cust_id fetch cur_cust_id into @v_id INSERT INTO Receiving (id_Declare ,id_Goods ,id_Creator ,Price ,Number ) VALUES (@v_id+1, @id_Goods , @id_Creator, @Price, @Number ) close cur_cust_id DEALLOCATE cur_cust_id END GO Сообщение 2714, уровень 16, состояние 3, процедура Receiving, строка 6 В базе данных уже существует объект с именем "Receiving". Вот таблица Create Table Receiving (id_Declare int NOT NULL, id_Goods int NOT NULL, id_Creator int NOT NULL, Price int NOT NULL, Number int NOT NULL, primary key (id_Declare, id_Goods) ); |
11 июн 15, 21:34 [17762528] Ответить | Цитировать Сообщить модератору |
A.V.O.I.D Member Откуда: Сообщений: 17 |
Надо сделать так, что бы процедура добавляла запись в таблицу Receiving |
11 июн 15, 21:36 [17762540] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37138 |
Не надо называть процедуру и таблицу одинаково. Сервер путаться в них изволит. |
11 июн 15, 23:38 [17762863] Ответить | Цитировать Сообщить модератору |
pkarklin Member Откуда: Москва (Муром) Сообщений: 74925 |
A.V.O.I.D, Разные типы данных придуманы не для того, чтобы все поля одной таблицы имели один и тот же тип данных, будь то varchar() или int. |
11 июн 15, 23:46 [17762892] Ответить | Цитировать Сообщить модератору |
A.V.O.I.D Member Откуда: Сообщений: 17 |
Гавриленко Сергей Алексеевич, спасибо)Все окей. Осталось понять, как применить update |
12 июн 15, 00:26 [17762974] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |