【问题标题】:Declaring and setting variable in upsert SQL Server query no在 upsert SQL Server 查询中声明和设置变量 no
【发布时间】:2019-02-02 13:26:37
【问题描述】:

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

我在TrippingTariffTransactionAuditTrail 表的TripTariffTransactionID 列中得到一个空值。

我应该对我的查询进行哪些更改?提前致谢

【问题讨论】:

  • 如何设置命令参数?
  • @ParrishHusband 请再检查一次先生
  • @TripTariffTransactionID != 0 != @TripTariffTransactionID IS NOT NULL

标签: c# sql-server upsert


【解决方案1】:

我用这种方法解决了我的问题

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

【讨论】:

    猜你喜欢
    • 2014-08-16
    • 2016-12-02
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多