Обновление двух таблиц в то же время после проверки, если запись существует.SQL сервер 2012
я разрабатываю aquery, который обновляет две таблицы одновременно с помощью user_defined_Table_types
(Tbl_addition_Store и Tbl_item_Journals)
tbl_addition_store (add_id,дата,product_id,Supplier_id,Конти,цена,стоимость)
Tbl_Journals(journal_id,add_id,дата,product_id,Supplier_id,Конти,цена,стоимость)
я создал два типа user_defined_Table_types
первый называется import_products
CREATE TYPE [dbo].[Import_Products] AS TABLE( [add_num] [bigint] NULL, [add_Date] [date] NULL, [product_id] [int] NULL, [Supp_id] [int] NULL, [quantity] [decimal](18, 2) NULL, [price] [decimal](18, 2) NULL, [value] [decimal](18, 2) NULL )а второй тип называется Insert_Items_Journals
CREATE TYPE [dbo].[Insert_Items_Journals] AS TABLE( [Add_Num] [bigint] NULL, [date] [date] NULL, [Product_Id] [int] NULL, [Supp_Id] [int] NULL, [Quantity] [decimal](18, 0) NULL, [Price] [decimal](18, 0) NULL, [Value] [decimal](18, 0) NULL )
после этого я создал хранимую процедуру import_All_Items .я хочу сохранить значения из моего datagridview внутри двух таблиц с помощью этой хранимой процедуры.Я хочу, чтобы запрос сначала проверил, существуют ли значения, и если они существуют, то запрос обновит количество.если он не существовал, то запрос добавит новую запись .проблема в том, что запрос сохраняет данные внутри tbl_addition_store из первой строки, но в tbl_item_Journals он сохраняет данные из второй строки
Что я уже пробовал:
create proc [dbo].[import_All_Items] @import_product Import_Products readonly, @Insert_Items_Journals Insert_Items_Journals readonly as declare @adition cursor set @adition =cursor for(select add_num, add_Date,product_id,Supp_id,supp_name,quantity,price,value from @import_product) open @adition declare @add_num bigint,@add_date date,@productid int,@Supp_id int,@supp_name nvarchar(150),@quantity decimal(18,2),@price decimal(18,2),@value decimal(18,2) fetch @adition into @add_num,@add_date,@productid,@Supp_id,@supp_name,@quantity,@price,@value while @@FETCH_STATUS=0 begin declare @insert_Journal cursor set @insert_Journal =cursor for(select Add_Num,date,Product_Id,Supp_Id,Quantity,Price,Value from @Insert_Items_Journals) open @insert_Journal fetch first from @insert_Journal into @add_num,@add_date,@productid,@Supp_id,@quantity,@price,@value while @@FETCH_STATUS=0 begin if exists (select Add_Id from Tbl_Addition_Store where Date=@add_date and Product_Id=@productid) begin update Tbl_Addition_Store set Quantity=quantity+@quantity,Value=Value+@value where Add_Id=(select Add_Id from Tbl_Addition_Store where Date=@add_date and Product_Id=@productid) update Tbl_Item_Journals set Quantity=quantity+@quantity,Value=Value+@value where Add_Sarf_Id=(select Add_Sarf_Id from Tbl_Item_Journals where journal_date=@add_date and product_id=@productid) end else begin INSERT INTO [dbo].[Tbl_Addition_Store] ([Add_Num] ,[Date] ,[Product_Id] ,[Supp_Id] ,[Supp_Name] ,[Quantity] ,[Price] ,[Value]) values (@add_num,@add_date,@productid,@Supp_id,@supp_name,@quantity,@price,@value) fetch next from @adition into @add_num,@add_date,@productid,@Supp_id,@supp_name,@quantity,@price,@value INSERT INTO [dbo].[Tbl_Item_Journals] (Add_Sarf_Id, [journal_date] ,[product_id] ,[supp_id] ,[quantity] ,[price] ,[value]) VALUES (@add_num,@add_date,@productid,@supp_id,@quantity,@price,@value) fetch next from @insert_Journal into @add_num,@add_date,@productid,@Supp_id,@quantity,@price,@value end fetch @adition into @add_num,@add_date,@productid,@Supp_id,@supp_name,@quantity,@price,@value fetch @insert_Journal into @add_num,@add_date,@productid,@Supp_id,@quantity,@price,@value end fetch @adition into @add_num,@add_date,@productid,@Supp_id,@supp_name,@quantity,@price,@value end
CHill60
Почему вы используете курсор? Было бы гораздо лучше использовать EXISTS и update/insert в наборах данных (в конце концов, SQL-это язык, основанный на множествах)
ZurdoDev
Я согласен с ^. Ты не понимаешь,-усложняет ее.
Если существует (выберите 1 из таблицы, где id = @id)
НАЧАТЬ
-- сделайте обновление
КОНЕЦ
ЕЩЕ
НАЧАТЬ
-- сделайте вставку
КОНЕЦ
Abuamer
спасибо вам за помощь, большое спасибо
Richard Deeming
Репост
Вы уже опубликовали это сообщение:
https://www.codeproject.com/Questions/1264210/How-can-I-save-values-from-two-tables-at-the-same[^]