简体   繁体   English

在upsert SQL Server查询中声明和设置变量

[英]Declaring and setting variable in upsert SQL Server query no

I have a problem with declaring and setting variable in my upsert sql query. 我在upsert sql查询中声明和设置变量时遇到问题。

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();
        }
    }
}

I'm getting a null values in the TripTariffTransactionID column in the TrippingTariffTransactionAuditTrail table. 我在TrippingTariffTransactionAuditTrail表的TripTariffTransactionID列中获得了空值。

What should I change on my query? 我应该对查询进行哪些更改? Thanks in advance 提前致谢

I solved my problem using this approach 我用这种方法解决了我的问题

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();
            }
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM