2016-08-17 3 views
0

Добрый день! Я новичок в asp.net и sql, и сейчас я работаю над хранимой процедурой, которая должна вставить ORDER_DETAILS в соответствии с ORDER_ID. Когда я впервые сделал хранимую процедуру в SQL Server Management Studio, она работала нормально, но когда я передал ее как localdb в Visual Studio, она внезапно перестает работать. Я пытался запустить хранимую процедуру бесчисленное количество раз, но она все еще не работает.Ошибка хранимой процедуры в localdb

У меня есть таблицы ORDER, ORDER_DETAILS и PRODUCT.

ЗАКАЗА ТАБЛИЦА

Id ИНТ

company_id ИНТ

order_details

Id ИНТ

ORDER_ID ИНТ

PRODUCT_ID ИНТ

company_id ИНТ

Другие атрибуты

ПРОДУКТ

Id ИНТ

company_id INT

Вот мой SP:

SP_INSERT_ORDER_DETAILS

CREATE PROCEDURE [dbo].[SP_INSERT_ORDER_DETAILS] 
 
\t @Product_id int, 
 
\t @Quantity_ordered int, 
 
\t @Status varchar(10) 
 

 
AS 
 
BEGIN TRANSACTION 
 
BEGIN TRY 
 
\t SET NOCOUNT OFF; 
 

 
\t DECLARE @iProduct_id int 
 
\t DECLARE @OS_ID int 
 
\t DECLARE @OrderId int 
 

 

 
\t SET @OS_ID = (SELECT IDENT_CURRENT('ORDERs')) 
 
\t SET @OrderId = @OS_ID 
 
\t SET @iProduct_id [email protected]_id 
 

 

 
\t DECLARE @totalCost decimal(18,2) 
 
\t DECLARE @itotalCost decimal(18,2) 
 

 
\t DECLARE @iQuantity_ordered int 
 

 
\t DECLARE @Total_amt_per_item decimal (18,2) 
 
    DECLARE @iTotal_amt_per_item decimal (18,2) 
 

 
\t DECLARE @Total_wdisc_per_item decimal(18,2) 
 
\t DECLARE @iTotal_wdisc_per_item decimal(18,2) 
 

 
\t DECLARE @Disc_amt_per_item decimal(18,2) 
 
\t DECLARE @iDisc_amt_per_item decimal(18,2) 
 

 
\t DECLARE @MeasurementId int 
 
\t DECLARE @iMeasurementId int 
 

 
\t DECLARE @iStatus varchar(10) 
 

 
\t DECLARE @iCompany_id int 
 

 

 
\t SET @totalCost = (SELECT PRODUCTs.TOTAL_COST FROM PRODUCTs WHERE PRODUCTs.Id [email protected]_id) 
 
\t SET @itotalCost = @totalCost 
 

 
\t SET @iQuantity_ordered [email protected]_ordered 
 

 
\t SET @Total_amt_per_item = @itotalCost * @iQuantity_ordered 
 
\t SET @iTotal_amt_per_item = @Total_amt_per_item 
 

 

 
\t SET @Disc_amt_per_item = 0.00 
 
\t SET @iDisc_amt_per_item = @Disc_amt_per_item 
 
\t SET @Total_wdisc_per_item = @iTotal_amt_per_item - @iDisc_amt_per_item 
 
\t SET @iTotal_wdisc_per_item [email protected]_wdisc_per_item 
 

 
\t SET @MeasurementId = (SELECT PRODUCTs.MEASUREMENT_ID FROM PRODUCTs WHERE [email protected]_id) 
 
\t SET @iMeasurementId = @MeasurementId 
 

 
\t SET @iStatus [email protected] 
 
\t SET @iCompany_id = (SELECT COMPANY_ID FROM ORDERs WHERE [email protected]) 
 

 

 
\t INSERT INTO ORDER_DETAILS(ORDER_ID,PRODUCT_ID,PAYMENT_ID,QUANTITY_ORDERED, [STATUS],MEASUREMENT_ID,DISC_PER_ITEM,DISC_AMT_PER_ITEM,TOTAL_AMT_PER_ITEM,TOTAL_WDISC_PER_ITEM,PAYMENT_STATUS_ID,COMPANY_ID) 
 
\t VALUES (@OrderId,@iProduct_id,0,@iQuantity_ordered, @iStatus, @iMeasurementId,0.00,@iDisc_amt_per_item,@iTotal_amt_per_item,@iTotal_wdisc_per_item,2,@iCompany_id) 
 

 

 
\t COMMIT TRANSACTION; 
 
END TRY 
 
BEGIN CATCH 
 
\t ROLLBACK TRANSACTION; 
 
END CATCH

Я уверен, что поставки значения параметров, но все-таки она возвращает ошибку. Что я делаю не так? Надеюсь, кто-то может мне помочь! Благодаря!

+1

Какая ошибка возвращается? – Arulkumar

+1

btw: избегать префикса 'sp_'. Это зарезервировано ... – Shnugo

+0

@Arulkumar Он не выполняет SP должным образом. Когда я запускаю SP, он возвращает значение -6. –

ответ

1

Поскольку вы уже вставить строку в Заказов вы должны пройти в значениях от, что таким образом Вы можете использовать их в этой процедуре. Вы уже передаете часть информации. Если вы включите OrderID и CompanyID, это будет немного проще. Довольно уверен, что вы могли бы упростить все это в этом направлении. И не забудьте никогда, никогда, никогда не иметь пустого улова.

CREATE PROCEDURE [dbo].[INSERT_ORDER_DETAILS] 
(
    @Product_id int 
    , @Quantity_ordered int 
    , @Status varchar(10) 
    , @OrderID int --You should be passing this in 
    , @CompanyID int --You should be passing this in 
) 
AS 
    SET NOCOUNT OFF; 

    INSERT INTO ORDER_DETAILS 
    (
     PRODUCT_ID 
     ,PAYMENT_ID 
     ,QUANTITY_ORDERED 
     , [STATUS] 
     ,MEASUREMENT_ID 
     ,DISC_PER_ITEM 
     ,DISC_AMT_PER_ITEM 
     ,TOTAL_AMT_PER_ITEM 
     ,TOTAL_WDISC_PER_ITEM 
     ,PAYMENT_STATUS_ID 
     ,COMPANY_ID 
    ) 
    select @Product_id 
     , 0 
     , @Quantity_ordered 
     , @Status  
     , p.MEASUREMENT_ID 
     , 0.00 
     , 0.00 
     , p.TOTAL_COST * @Quantity_ordered 
     , p.TOTAL_COST * @Quantity_ordered 
     , 2 
     , @CompanyID 
    FROM PRODUCTs p 
    WHERE p.Id = @Product_id 
+0

Спасибо, сэр! Хотя ваш комментарий о Try Catch - это то, что действительно помогло мне в решении моей проблемы. Я также попробую эту хранимую процедуру. –

1

Try переключая начинаются заявления, чтобы правильно их гнездо:

AS 
BEGIN TRY 
    BEGIN TRANSACTION 
    SET NOCOUNT OFF; ... 
Смежные вопросы