2014-12-16 6 views
-1

Как говорится в заголовке. Когда я вызываю метод UPDATE в mysql, он обновляет ячейку. Но создает новую строку со старыми данными.MYSQL UPDATE создает новую запись

Вот хранимая процедура Im с помощью:

Procedure [dbo].[Insert_Invoice_And_Insert_Address] 
@UserID int, 
@Occasion nvarchar(50), 
@FlowerName nvarchar(50), 
@FirstName nvarchar(50), 
@LastName nvarchar(50), 
@StreetAddress nvarchar(50), 
@Suite nvarchar(50), 
@City nvarchar(50), 
@Country nvarchar(50), 
@Province nvarchar(50), 
@PostalCode nvarchar(50) 
as 
DECLARE @TaxCode money 
DECLARE @InvoiceID int 
DECLARE @FlowerID int 
DECLARE @AddressID int 
DECLARE @CountryID int 
DECLARE @ProvinceID int 


SET @TaxCode = (SELECT [TaxRate] 
       FROM [Flowers].[dbo].[TaxCode] 
       where [Status] like 1) 
       SELECT @TaxCode; 

SET @CountryID = (SELECT [CountryID] 
       FROM [Flowers].[dbo].[Country] 
       WHERE [DisplayValue] like @Country) 
       SELECT @CountryID 

SET @ProvinceID = (SELECT [ProvinceID] 
       FROM [Flowers].[dbo].[Province] 
       WHERE [Name] Like @Province) 
       SELECT @ProvinceID 

SET @FlowerID = (SELECT [FlowerID] 
       FROM [Flowers].[dbo].[Flowers] 
       where [Description] like @FlowerName) 
       SELECT @FlowerID; 

IF @FlowerID in (SELECT [Flower] 
       FROM [Flowers].[dbo].[InvoiceDetails] 
       WHERE [Processed] = 0 and [InvoiceID] = (SELECT [InvoiceID] 
            FROM [Flowers].[dbo].[Invoices] 
            WHERE [UserID] = @UserID and [Processed] = 0)) BEGIN 
       SET @InvoiceID = (SELECT [InvoiceID] 
        FROM [Flowers].[dbo].[Invoices] 
        where [UserID] like @UserID and [Processed] like 0); 
        SELECT @InvoiceID; 
       UPDATE [Flowers].[dbo].[InvoiceDetails] 
        SET [ItemNumber] = [ItemNumber] + 1 
        WHERE InvoiceID like @InvoiceID and [Processed] like 0 and Flower like @FlowerID; 
       END 
       ELSE 
INSERT INTO [Flowers].[dbo].[Invoices] 
      ([UserID] 
      ,[TaxCode] 
      ,[Processed] 
      ) 
     VALUES 
      (@UserID 
      ,@TaxCode 
      ,0 
      ) 

INSERT INTO [Flowers].[dbo].[Addresses] 
      ([Street] 
      ,[apt] 
      ,[City] 
      ,[Province] 
      ,[Country] 
      ,[PostalCode] 
      ) 
      VALUES 
      (@StreetAddress 
      ,@Suite 
      ,@City 
      ,@ProvinceID 
      ,@CountryID 
      ,@PostalCode 
      ) 

SET @AddressID = (SELECT [AddressID] 
       FROM [Flowers].[dbo].[Addresses] 
       where [PostalCode] like @PostalCode and [Street] like @StreetAddress) 
       SELECT @AddressID; 

SET @InvoiceID = (SELECT [InvoiceID] 
       FROM [Flowers].[dbo].[Invoices] 
       where [UserID] like @UserID and [Processed] like 0); 
       SELECT @InvoiceID; 

INSERT INTO [Flowers].[dbo].[InvoiceDetails] 
      ([ItemNumber] 
      ,[Flower] 
      ,[Processed] 
      ,[DeliveryAddress] 
      ,[InvoiceID] 
      ) 
     VALUES 
      (1 
      ,@FlowerID 
      ,0 
      ,@AddressID 
      ,@InvoiceID 
      ) 

Что используется для является страница заказа. и для того, чтобы добавить больше количества в свою корзину, вы в конечном итоге просто отправляете информацию, как ее первый заказ. И я использую инструкции IF ELSE, чтобы определить, является ли это первым порядком, или если он добавляет больше количества. incase вы интересуетесь, почему это делается так. его школьный проект. И они специально просили, чтобы это было сделано так.

EDIT:

Вот snipet из кода им возникли проблемы с:

UPDATE [Flowers].[dbo].[InvoiceDetails] 
        SET [ItemNumber] = [ItemNumber] + 1 
        WHERE InvoiceID like @InvoiceID and [Processed] like 0 and Flower like @FlowerID; 
+0

Не могли бы вы сказать, какие отчеты должны быть выполнены на 'состоянии ELSE' –

+0

является ли это MySQL или SQL Server Где это делается в' UPDATE' в этой хранимой процедуре – wchiquito

+0

Это SQL Server правильно? –

ответ

0

Пожалуйста, попробуйте эту модификацию в скрипте (вы пропустили НАЧАТЬ .. END в вашем еще блоке (в 3 заявления):??

(...) 

IF @FlowerID in (SELECT [Flower] 
        FROM [Flowers].[dbo].[InvoiceDetails] 
        WHERE [Processed] = 0 and [InvoiceID] = (SELECT [InvoiceID] 
             FROM [Flowers].[dbo].[Invoices] 
             WHERE [UserID] = @UserID and [Processed] = 0)) 
    BEGIN 
        SET @InvoiceID = (SELECT [InvoiceID] 
         FROM [Flowers].[dbo].[Invoices] 
         where [UserID] like @UserID and [Processed] like 0); 
         SELECT @InvoiceID; 
        UPDATE [Flowers].[dbo].[InvoiceDetails] 
         SET [ItemNumber] = [ItemNumber] + 1 
         WHERE InvoiceID like @InvoiceID and [Processed] like 0 and Flower like @FlowerID; 
    END 
ELSE 
    BEGIN 
     INSERT INTO [Flowers].[dbo].[Invoices] 
       ([UserID] 
       ,[TaxCode] 
       ,[Processed] 
       ) 
      VALUES 
       (@UserID 
       ,@TaxCode 
       ,0 
       ) 

    INSERT INTO [Flowers].[dbo].[Addresses] 
       ([Street] 
       ,[apt] 
       ,[City] 
       ,[Province] 
       ,[Country] 
       ,[PostalCode] 
       ) 
       VALUES 
       (@StreetAddress 
       ,@Suite 
       ,@City 
       ,@ProvinceID 
       ,@CountryID 
       ,@PostalCode 
       ) 

    SET @AddressID = (SELECT [AddressID] 
        FROM [Flowers].[dbo].[Addresses] 
        where [PostalCode] like @PostalCode and [Street] like @StreetAddress) 
        SELECT @AddressID; 

    SET @InvoiceID = (SELECT [InvoiceID] 
        FROM [Flowers].[dbo].[Invoices] 
        where [UserID] like @UserID and [Processed] like 0); 
        SELECT @InvoiceID; 

    INSERT INTO [Flowers].[dbo].[InvoiceDetails] 
       ([ItemNumber] 
       ,[Flower] 
       ,[Processed] 
       ,[DeliveryAddress] 
       ,[InvoiceID] 
       ) 
      VALUES 
       (1 
       ,@FlowerID 
       ,0 
       ,@AddressID 
       ,@InvoiceID 
       ) 
    END 
+0

Awesome. оно работает. просто комментируя, чтобы люди знали, что мне нужно было сменить операторы «как» на «=», где я задавал переменные. «Like» в @ProvinceID возвращал значение null. где возвращаемые результаты «=» – HorribleScripter

+0

Я действительно рад, что решение было найдено плюс ошибки, отмеченные вами самим. Так что давайте учиться :) С уважением. –

Смежные вопросы