Объявление и установка переменной в запросе upsert SQL Server № - PullRequest
0 голосов
/ 28 августа 2018

У меня проблема с объявлением и установкой переменной в моем запросе sql upsert.

public void UpdateTrippingTariff(List<TrippingTariffTransaction> obj)
{           
    using (IDbConnection connection = ConnectionManager.Connection)
    {
        string qry = "";

        foreach (var details in obj.ToList())
        {
            qry = "DECLARE @TripTariffTransactionID as BIGINT;";
            qry += "SET @TripTariffTransactionID = (SELECT Id FROM [dbo].[TrippingTariffTransaction] WHERE Trip = @Trip AND TrippingDistanceId = @TrippingDistanceId AND TrippingTariffId = @TrippingTariffId);";
            qry += @" IF (@TripTariffTransactionID != 0) 
                          UPDATE [dbo].[TrippingTariffTransaction]
                          SET Price = @Price
                          WHERE Id = @TripTariffTransactionID
                       ELSE
                          INSERT INTO [dbo].[TrippingTariffTransaction]
                            (TrippingTariffId, Trip, Price, TrippingDistanceId, IsActive)
                          VALUES (@TrippingTariffId, @Trip, @Price, @TrippingDistanceId, @IsActive);
                       SET @TripTariffTransactionID = (SELECT CAST(SCOPE_IDENTITY() as BIGINT));";

            qry += @"INSERT INTO [dbo].[TrippingTariffTransactionAuditTrail]
                            (LogDatetime, MasterlistId, ComputerName, TrippingTariffTransactionID, Activity)
                     VALUES (GETDATE(), @MasterlistId, @ComputerName, @TripTariffTransactionID, @Activity)";

            if (connection.State == ConnectionState.Closed)
            {
                connection.Open();
            }

            connection.Execute(qry, details);
            connection.Close();
        }
    }
}

Я получаю нулевые значения в столбце TripTariffTransactionID в таблице TrippingTariffTransactionAuditTrail.

Что я должен изменить в своем запросе? Заранее спасибо

1 Ответ

0 голосов
/ 28 августа 2018

Я решил свою проблему, используя этот подход

public void UpdateTrippingTariff(List<TrippingTariffTransaction> obj)
    {           
        using (IDbConnection connection = ConnectionManager.Connection)
        {
            string qry = "";
            foreach (var details in obj.ToList())
            {
                qry = "DECLARE @TripTariffTransactionID as BIGINT;";
                qry += "SET @TripTariffTransactionID = (SELECT Id FROM [dbo].[TrippingTariffTransaction] WHERE Trip = @Trip AND TrippingDistanceId = @TrippingDistanceId AND TrippingTariffId = @TrippingTariffId);";
                qry += @" IF (@TripTariffTransactionID != 0) 
                          BEGIN                             
                              UPDATE [dbo].[TrippingTariffTransaction]
                                    SET
                                    Price = @Price
                             WHERE Id = @TripTariffTransactionID
                         END

                   ELSE
                        BEGIN
                            INSERT INTO [dbo].[TrippingTariffTransaction]
                                (TrippingTariffId
                                ,Trip
                                ,Price
                                ,TrippingDistanceId
                                ,IsActive)
                           VALUES
                                (@TrippingTariffId
                                ,@Trip
                                ,@Price
                                ,@TrippingDistanceId
                                ,@IsActive);
                           SET @TripTariffTransactionID = (SELECT CAST(SCOPE_IDENTITY() as BIGINT))
                       END;";

                qry += @"INSERT INTO [dbo].[TrippingTariffTransactionAuditTrail]
                            (LogDatetime
                            ,MasterlistId
                            ,ComputerName
                            ,TrippingTariffTransactionID
                            ,Activity)
                     VALUES
                            (GETDATE()
                            ,@MasterlistId
                            ,@ComputerName
                            ,@TripTariffTransactionID
                            ,@Activity)";

                if (connection.State == ConnectionState.Closed)
                {
                    connection.Open();
                }
                connection.Execute(qry, details);
                connection.Close();
            }
        }
    }
...