Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 9

SQL Хранимый запрос

20.04.2023, 22:13. Показов 693. Ответов 11

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста, как реализовать запись в таблицу через хранимую процедуру (желательно по шагам). Так же, не допустить повторения позиций, т.е. если товар в таблице уже есть и его вводят повторно через хранимую процедуру , то его не записывать.
Спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.04.2023, 22:13
Ответы с готовыми решениями:

Хранимый селект
Добрый вечер, не могу разобраться с проблемой, хочу получать данные с внешней базы в oracle forms, но моя версия форм не поддерживает...

Нужно выполнить хранимый запрос с параметрами
помогите разобраться, пожалуйста! имеется хр. запрос вида 'select * from tdoc where tdoc = ' делаю таким образом: ...

Создать программу хранимый пароль
Создать программу хранимый пароль. Которое шифрирует текст через пароль и сигнатуру. Помогите сделать пожалуйста

11
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
21.04.2023, 08:22
Цитата Сообщение от vbr126378 Посмотреть сообщение
как реализовать запись в таблицу через хранимую процедуру
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE OR ALTER PROC [dbo].[spHRDInsertEmployeeTicket]
    @employeeID int,
    @travelDate datetime,
    @departure nvarchar(100),
    @destination nvarchar(100),
    @price decimal(12, 2),
    @newID int OUT
AS
BEGIN
    
    INSERT INTO dbo.tblHRDTicket
        (ID_HRDEmployee, Departure, Destination, TravelDate, Price)
    VALUES
        (@employeeID, @departure, @destination, @travelDate, @price);
 
    SET @newID = SCOPE_IDENTITY(); -- Получаем ID новой записи
 
END
GO
Цитата Сообщение от vbr126378 Посмотреть сообщение
Так же, не допустить повторения позиций
Сделать уникальный ключ по необходимым полям или написать триггер INSTEAD OF INSERT, который будет проверять наличие товара в таблице перед вставкой записи...

Добавлено через 2 минуты
vbr126378, Можно в процедуре перед вставкой сделать проверку. Вариантов много
1
1306 / 360 / 98
Регистрация: 14.10.2022
Сообщений: 1,103
21.04.2023, 11:27
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Сделать уникальный ключ по необходимым полям или написать триггер INSTEAD OF INSERT, который будет проверять наличие товара в таблице перед вставкой записи...
vbr126378, Можно в процедуре перед вставкой сделать проверку. Вариантов много
Нининини!
Не учи детей плохому!
https://sqlperformance.com/202... ti-pattern
https://habr.com/ru/companies/... es/547094/
0
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
21.04.2023, 11:38
uaggster, Дак у ТС не MERGE, а именно вставка уникальной строки. Ему не надо добавлять товар, если он уже есть в таблице.
Или что-то не так понял?
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 9
21.04.2023, 12:23  [ТС]
Все верно, с этим уже разобрался, но появился новый вопрос, в одной хранимой процедуре нужно это выполнить для двух таблиц, то есть сперва инсерт в одну, а потом в другую но вылетает ошибка : Конфликт инструкции INSERT с ограничением FOREIGN KEY "FK__deals__goods_id__3F115E1A". Конфликт произошел в базе данных "Sokolov_AD", таблица "dbo.goods", column 'goods_id'.
0
1306 / 360 / 98
Регистрация: 14.10.2022
Сообщений: 1,103
21.04.2023, 12:34
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
uaggster, Дак у ТС не MERGE, а именно вставка уникальной строки. Ему не надо добавлять товар, если он уже есть в таблице.
Или что-то не так понял?
Так классический upsert же
0
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
21.04.2023, 12:41
vbr126378,
1. Вставить данные в главную таблицу, получить ID новой записи.
2. Вставить данные в подчинённую таблицу, ID для внешнего ключа получен выше.
0
1306 / 360 / 98
Регистрация: 14.10.2022
Сообщений: 1,103
21.04.2023, 13:12
Тьфу, прошу прощения. Гляжу в книгу, вижу фигу.
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 9
25.04.2023, 10:16  [ТС]
Andrey-MSK, Здравствуйте ещё раз, айди записи в первой таблице получил, но не понимаю что значит вставить данные в подчиненную таблицу

T-SQL
1
2
3
4
5
6
7
8
as
begin
declare @deal_type VARCHAR(30)
declare @kol INT 
declare @unit VARCHAR(10);
insert into deals (id,goods_id,deal_type,kol,unit)
values ((select max(id) from deals), (select max(goods_id) from goods ),@deal_type ,@kol ,@unit )
end
это хранимая процедура ко второй (не главной) таблице, связь идет по goods_id.
Или вы имели ввиду, что "PK__deals__3213E83F2C711E8C" нужно вставить на место values вместо (select max(goods_id) from goods )
Спасибо
0
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
25.04.2023, 10:21
vbr126378,
T-SQL
1
2
3
4
5
6
DECLARE @newID int
 
INSERT INTO MyTable01 VALUES (..., ..., ...);
SET @newID = SCOPE_IDENTITY();
 
INSERT INTO MyTable02 VALUES (@newID, ..., ..., ...);
ID в таблицах должны генерироваться автоматически.
1
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 9
25.04.2023, 10:54  [ТС]
Andrey-MSK, Принял, и завершающий вопрос (я надеюсь), для каждого айди свою переменную нужно регистрировать?
0
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
25.04.2023, 11:05
Цитата Сообщение от vbr126378 Посмотреть сообщение
для каждого айди свою переменную нужно регистрировать?
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- Записывает данные сразу в обе таблицы
CREATE PROC spInsertDataToTables
AS
BEGIN 
    DECLARE @newID int;
 
    INSERT INTO MyTable01 VALUES (..., ..., ...);
    SET @newID = SCOPE_IDENTITY();
     
    INSERT INTO MyTable02 VALUES (@newID, ..., ..., ...);
END
 
-- Если нужно вставить данные только в первую таблицу
-- и получить ID
CREATE PROC spInsertDataToTable
    @newID int OUT -- выходной параметр с новым ID, можно использовать где надо
AS
BEGIN 
    INSERT INTO MyTable01 VALUES (..., ..., ...);
    SET @newID = SCOPE_IDENTITY();
END
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.04.2023, 11:05
Помогаю со студенческими работами здесь

Как передать значение из dateTimePicker в запрос sql Microsoft SQL Server
Здравствуйте! Подскажите пожалуйста,как правильно передать значения из dateTimePicker в запрос sql ? Я пока что не очень силен во всем...

SQL запрос работающий в Access выдаёт ошибку в SQL Server
Здравствуйте! Понадобилось перевести БД с Access в SQL Server. Перевод осуществлял через MS SQL Server Management Studio. Таблицы...

Запрос Select T-sql - Вложенный запрос вернул больше одного значения
Нужно посчитать комиссию от сделки. DealShare(комиссия) - поле таблицы agents, supplies - предложения(риелторы клиентам) deals-...

Как посмотреть T-SQL запрос который генерирует Entity Framework запрос
как посмотреть T-SQL запрос который генерирует Entity Framework запрос в visual studio 2010, 2012

Как преобразовать данный Запрос из SQL Server в Запрос MS Access?
string query = $"SELECT t_name FROM Nap4t WHERE DATEPART(DAY, t_date) = DATEPART(DAY, GETDATE()) AND DATEPART(MONTH, t_date) =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru