【问题标题】:SQL Server : duplicates valueSQL Server:重复值
【发布时间】:2015-01-10 07:45:06
【问题描述】:

我正在更新我的项目现在的问题是有时票号重复更新后此代码有什么问题?

或者让我能够做到的最优雅的解决方案是什么

我的代码是

DECLARE @tbl_ID TABLE (nID int)
UPDATE tbl_Tickets
SET Ticket_Type = @Ticket_Type,
VehicleNo= @VehicleNo,
Customer=@Customer,
Job_Code=@Job_Code,
Material=@Material,
First_Weight=@First_Weight,
Second_Weight=@Second_Weight,
Net_Weight=@Net_Weight,
Add_Charges=@Add_Charges,
Deduction=@Deduction,
Ticket_Amount=@Ticket_Amount,
SOURCE=@Source,
       Destination=@Destination,
OPERATOR=@Operator,
     Out_Time=@Out_Time,
     PC=@PC,
     Unit_Price=@Unit_Price OUTPUT INSERTED.QS_Code INTO @tbl_ID (nID)
 WHERE (VehicleNo=@VehicleNo)
 AND (Second_Weight IS NULL)
 AND (Ticket_Type <>'DELETED') IF @@ROWCOUNT=0 BEGIN

INSERT INTO tbl_Tickets (Ticket_Type, TicketNo, VehicleNo, nDate, Customer,Job_Code,Material,     First_Weight, Second_Weight, Net_Weight, Unit_Price, Add_Charges, Deduction, Ticket_Amount,SOURCE, Destination,
                       OPERATOR, In_Time, PC)
VALUES (@Ticket_Type,
      @TicketNo,
      @VehicleNo,
      @nDate,
      @Customer,
      @Job_Code,
      @Material,
      @First_Weight,
      @Second_Weight,
      @Net_Weight,
      @Unit_Price,
      @Add_Charges,
      @Deduction,
      @Ticket_Amount,
      @Source,
      @Destination,
      @Operator,
      @In_Time,
      @PC)
 SELECT IDENT_CURRENT('tbl_Tickets')
 FROM tbl_Tickets
 UPDATE tbl_TicketNumber
 SET TicketNo = @TTicket,
  PC= @TPC,
  nDate= @TnDate WHERE (PC=@TPC) IF @@ROWCOUNT=0 BEGIN
 INSERT INTO tbl_TicketNumber (TicketNo, PC, nDate)
 VALUES (@TTicket,
      @TPC,
      @TnDate) END END
SELECT *
FROM @tbl_ID

那我改成

cm.CommandText = " DECLARE @tbl_ID TABLE (nID int) UPDATE tbl_Tickets " & _
        " SET Ticket_Type = @Ticket_Type, TicketNo = @TicketNo, VehicleNo= @VehicleNo," & _
        " nDate=@nDate, Customer=@Customer, Job_Code=@Job_Code, Material=@Material, " & _
        " First_Weight=@First_Weight, Second_Weight=@Second_Weight, Net_Weight=@Net_Weight, " & _
        " Add_Charges=@Add_Charges, Deduction=@Deduction, Ticket_Amount=@Ticket_Amount, " & _
        " Source=@Source, Destination=@Destination, Operator=@Operator, Out_Time=@Out_Time, PC=@PC, Payment=@Payment,Unit_Price=@Unit_Price " & _
        EditString & _
        " OUTPUT INSERTED.QS_Code INTO @tbl_ID (nID)  WHERE (VehicleNo=@VehicleNo) AND (Second_Weight IS NULL) AND  (Ticket_Type <>'Weighbridge_VOID') AND  (Ticket_Type <>'Cash_VOID') " & _
       " IF @@ROWCOUNT=0  " & _
        " BEGIN " & _
            " INSERT INTO tbl_Tickets (Ticket_Type, TicketNo, VehicleNo, nDate, Customer,Job_Code,Material, " & _
            " First_Weight, Second_Weight, Net_Weight, Unit_Price, Add_Charges, Deduction, Ticket_Amount,Source, " & _
            " Destination, Operator, In_Time, PC, Payment " & _
            AddString & " ) VALUES (@Ticket_Type, '00-00', @VehicleNo, @nDate, @Customer,@Job_Code,@Material, " & _
            " @First_Weight, @Second_Weight, @Net_Weight, @Unit_Price, @Add_Charges, @Deduction, @Ticket_Amount,@Source, " & _
            " @Destination, @Operator, @In_Time, @PC, @Payment  " & _
            AddStringVal & " ) SELECT IDENT_CURRENT('tbl_Tickets') FROM tbl_Tickets " & _
           " END SELECT * From @tbl_ID" '

并像这样在此更新之后添加 TicketNumberUpdate 子

cm.CommandText = " UPDATE tbl_TicketNumber " & _
            " SET TicketNo = @TTicket, PC= @TPC, nDate= @TnDate" & _
            " WHERE (PC=@TPC) " & _
           " IF @@ROWCOUNT=0 " & _
           " INSERT INTO tbl_TicketNumber (TicketNo, PC, nDate) VALUES (@TTicket,@TPC,@TnDate) "

【问题讨论】:

  • SQL Injection alert - 你应该将你的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入
  • 您能否按照 sql studio manager 中显示的格式格式化代码,以便于阅读?
  • 好的 w0051977 你能看到这个

标签: sql sql-server vb.net


【解决方案1】:

您似乎忽略了 IDENT_CURRENT 的值 尝试改变

SELECT IDENT_CURRENT('tbl_Tickets')
FROM tbl_Tickets

UPDATE tbl_TicketNumber SET
    TicketNo = @TTicket,
    PC= @TPC,
    nDate= @TnDate
WHERE (PC=@TPC) 

到这里

SET @TTicket = IDENT_CURRENT('tbl_Tickets')

UPDATE tbl_TicketNumber SET
    TicketNo = @TTicket,
    PC= @TPC,
    nDate= @TnDate
WHERE (PC=@TPC) 

【讨论】:

  • 感谢您的回复.. 我使用 ExecuteScalar 获取此标识号以供以后在 vb 中使用,我无法分配给@TTicket 即时传递其他参数,请检查此link跨度>
猜你喜欢
  • 2013-07-22
  • 1970-01-01
  • 2015-11-10
  • 2017-06-04
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 2021-03-07
  • 2021-06-28
相关资源
最近更新 更多