【发布时间】: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