Jayanta Modak Ответов: 3

Sql хранимые процедуры-DO-NOT work пожалуйста, помогите


когда я запускаю эту хранимую процедуру из vb.net он работает, но не работает должным образом.
я хочу
1-й - - - - удалить все данные против "Saleinvid"
2-й - - - - вставить данные против "Saleinvid"
Но он удаляет все данные и вставляет только одни данные(Один), которые являются записью наконец в виде списка в vb.net применение
пожалуйста, помогите мне....

Что я уже пробовал:

ALTER PROC P_UpdateSaleInv
@saleinvid	nvarchar(255)	,
@slno	int	,
@ItemIDsale	int	,
@SDQty	int	,
@SDMRP	decimal(18, 2)	,
@SDRate	decimal(18, 2)	,
@SDdis	decimal(18, 2)	,
@Sdcgst	decimal(18, 2)	,
@Scgstamt	decimal(18, 2)	,
@Sdsgst	decimal(18, 2)	,
@Ssgstamt	decimal(18, 2)	,
@Sdigst	decimal(18, 2)	,
@Sigstamt	decimal(18, 2)	,
@STaxableAmt	decimal(18, 2)	,
@Stotaltaxamt	decimal(18, 2)	,
@SDAmount	decimal(18, 2)	,
@S_type	varchar(2)	,
@S_ItemHSNid	int,	
@SaleInvdt	date

as 
BEGIN  
 
begin    
delete from TBL_sale_invdet where saleinvid=@saleinvid
end    

begin

insert into TBL_sale_invdet(saleinvid,slno,ItemIDsale,SDQty,SDMRP,SDRate,SDdis,Sdcgst,Scgstamt,Sdsgst,Ssgstamt,Sdigst,Sigstamt,STaxableAmt,Stotaltaxamt,SDAmount,S_type,S_ItemHSNid,SaleInvdt)                  
values(@saleinvid,@slno,@ItemIDsale,@SDQty,@SDMRP,@SDRate,@SDdis,@Sdcgst,@Scgstamt,@Sdsgst,@Ssgstamt,@Sdigst,@Sigstamt,@STaxableAmt,@Stotaltaxamt,@SDAmount,@S_type,@S_ItemHSNid,@SaleInvdt)
end 
end

PIEBALDconsult

А) я настоятельно рекомендую не использовать строку для идентификаторов.
Б) если это обновление, то почему бы не использовать обновление?

Jayanta Modak

TBL_sale_invdet эту таблицу я использовал для ввода сведений о продукте счета-фактуры продажи. когда я редактирую счет продажи, меняю детали продукта (удаляю, добавляю, изменяю и т.д.), то только обновление не завершает общую работу. для этого я использовал DELETE, для всех данных против "saleinvid" из этой таблицы TBL_sale_invdet. Затем я повторно **вставляю** детали продукта.
пожалуйста, помогите мне.........

3 Ответов

Рейтинг:
2

Dave Kreskowiak

Ваш код действительно удаляет каждую запись из TBL_sale_invdet, где любая запись имеет saleinvid @saleinvid. Затем он вставляет одну запись с тем же указанным @saleinvid.

А что, по-твоему, должно было случиться?

Если каждая запись в вашем TBL_sale_invdet имеет одно и то же значение saleinvid, то все эти записи будут удалены. Вероятно, было бы неплохо проверить содержимое таблицы перед запуском вашего кода.

Проблема, по-видимому, не в SQL, а в вашем понимании того, что происходит, и в данных, которые вы ему предоставляете. Вот тут-то и пригодится отладчик. Он предназначен для отладки вас и вашего понимания кода.


Jayanta Modak

TBL_sale_invdet эту таблицу я использовал для ввода сведений о продукте счета-фактуры продажи. когда я редактирую счет продажи, меняю детали продукта (удаляю, добавляю, изменяю и т.д.), то только обновление не завершает общую работу. для этого я использовал DELETE, для всех данных против "saleinvid" из этой таблицы TBL_sale_invdet. Затем я повторно вставляю детали продукта.
пожалуйста, помогите мне.........

Dave Kreskowiak

Ммм... что?

Почему вы удаляете все записи для определенного счета-фактуры, а затем повторно вставляете их? Это ... глупо. Удалите ненужные записи, обновите редактируемые записи и вставьте новые записи для счета-фактуры.

SQL, который вы разместили, никогда не будет делать то, что вы хотите. Он может только удалить все записи для счета-фактуры и вставить одну запись. Вы должны разделить эти операции на разные SP или просто поместить SQL в код вашего приложения. Вам не сойдет с рук то, что вы делаете прямо сейчас.

Рейтинг:
16

khanabrar

Привет, вам нужно создать отдельную процедуру для удаления записи, а затем вставить записи.
Объяснение:


BEGIN  
 
begin    -----If u insert the second record from the code it will delete the previous inserted record
delete from TBL_sale_invdet where saleinvid=@saleinvid
end    

begin

insert into TBL_sale_invdet(saleinvid,slno,ItemIDsale,SDQty,SDMRP,SDRate,SDdis,Sdcgst,Scgstamt,Sdsgst,Ssgstamt,Sdigst,Sigstamt,STaxableAmt,Stotaltaxamt,SDAmount,S_type,S_ItemHSNid,SaleInvdt)                  
values(@saleinvid,@slno,@ItemIDsale,@SDQty,@SDMRP,@SDRate,@SDdis,@Sdcgst,@Scgstamt,@Sdsgst,@Ssgstamt,@Sdigst,@Sigstamt,@STaxableAmt,@Stotaltaxamt,@SDAmount,@S_type,@S_ItemHSNid,@SaleInvdt)
end 
end

Решение:
1. Создайте Delete sproc и вызовите из кода, чтобы удалить запись. а затем создайте в sert запись для идентификатора счета-фактуры.


CHill60

"Если вы вставите вторую запись из кода, то она удалит предыдущую вставленную запись" ?? Зачем вставлять одну запись, чтобы удалить другую? Нет абсолютно никакой необходимости иметь отдельную процедуру для удаления и вставки

khanabrar

Привет, например, если вам нужно вставить ниже сценарий:
Вставьте 3 записи с идентификатором продажи 2000. код будет запущен 3 раза, чтобы вставить три записи.
Давайте посмотрим на проблему.
Цикл 1. Удалите запись для sales ID 2000 и вставьте (0 записей удалены, 1 запись вставлена).
Цикл 2 . Удалите запись для sales ID 2000 и вставьте (1 запись удалена, 1 запись вставлена).
Цикл 3. Удалите запись для sales ID 2000 и вставьте (1 запись удалена, 1 запись вставлена).
Конечный результат-вы получите только одну запись, сохраненную в БД, а остальные будут удалены.
Теперь то, что я сказал, чтобы использовать два отдельных кода для удаления и вставки.
1. Сначала вызывается delete sproc и удаляется запись с идентификатором продаж.
2. Вызов sproc вставить и вставить все данные с петлей.

Jayanta Modak

Сэр, пожалуйста, помогите мне...
как решить проблему за одну процедуру
пожалуйста, помогите мне....

khanabrar

можете ли вы поделиться кодом, когда вы вызываете sproc

Jayanta Modak

хорошо, сэр, но теперь я нахожусь в офисе, я разделяю код через некоторое время Извините, сэр, пожалуйста, простите меня...

CHill60

Это был сарказм. Нет необходимости в отдельных процедурах. ОП должен понимать, что они делают, а не то, что они думают, что им нужно делать.

Рейтинг:
1

#realJSOP

Я подозреваю, что все ваши записи имеют одинаковую ценность для saleinvid.


Jayanta Modak

TBL_sale_invdet эту таблицу я использовал для ввода сведений о продукте счета-фактуры продажи. когда я редактирую счет продажи, меняю детали продукта (удаляю, добавляю, изменяю и т.д.), то только обновление не завершает общую работу. для этого я использовал DELETE, для всех данных против "saleinvid" из этой таблицы TBL_sale_invdet. Затем я повторно **вставляю** детали продукта.
пожалуйста, помогите мне.........