Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,038

HOME > .NET Framework > Forum > คำสั่ง SQL ที่พอupdateข้อมูลในเเถว เเล้วถ้ามันซ้ำกับในช่วงจำนวนที่มีอยู่ ก็ไม่ให้ update


 

[.NET] คำสั่ง SQL ที่พอupdateข้อมูลในเเถว เเล้วถ้ามันซ้ำกับในช่วงจำนวนที่มีอยู่ ก็ไม่ให้ update

 
Topic : 128434



โพสกระทู้ ( 9 )
บทความ ( 1 )



สถานะออฟไลน์



| id | Min | Max | Vat | +---+-----+---------+--------+ | A11 | 200 | 499.99 | 3% | | A12 | 500 | 1000 | 5% | | B13 | 0 | 999.99 | 3.5% | | B14 | 1000 | 1599.99 | 7% | | B16 | 1600 | NULL | 12% | | C10 | 900 | 2500 | 4% | +---+-----+---------+--------+


A,B,C เป็นกลุ่มของ product ค่า NULL คือ มากกว่า MIN ไปเรื่อยๆ ไม่เกิน ( decimal 10,2) นะคะ ทีนี้

1. ถ้า Update ข้อมูล ที่ id_product เหมือนกัน เเต่ Min_price/Max_price ไม่ซ้ำกันก็จะ Updateได้
เช่นถ้า Update id_product = A11

| id | Min | Max | Vat | +---+-----+---------+--------+ | A11 | 500 | 1000 | 3% | +---+-----+---------+--------+



จะได้
| idt | Min | Max | Vat | +---+-----+---------+-----------+ | A11 | 200 | 499.99 | 3% | | A11 | 500 | 1000 | 3% | | A12 | 500 | 1000 | 5% | | B13 | 0 | 999.99 | 3.5% | | B14 | 1000 | 1599.99 | 7% | | B16 | 1600 | NULL | 12% | | C10 | 900 | 2500 | 4% | +---+-----+---------+--------+




2. แต่ถ้้า update เเถวที่ซ้ำอยู่เเล้ว ก็จะ updateไม่ได้ค่ะ

ขอบคุณมาก



Tag : .NET, Ms SQL Server 2014



ประวัติการแก้ไข
2017-08-01 10:41:40
2017-08-01 10:42:22
2017-08-01 10:43:26
2017-08-01 10:44:04
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2017-08-01 10:38:04 By : NumWhan View : 1059 Reply : 2
 

 

No. 1



โพสกระทู้ ( 9 )
บทความ ( 1 )



สถานะออฟไลน์


ตอนนี้ลอง Query ใน Sql server ได้เเล้วนะคะ

Code (SQL)
01.declare @min decimal(10,2) = 800
02.declare @max decimal(10,2) = 5000
03. 
04. 
05. 
06. 
07.UPDATE  promotion
08.SET     min_price = '800' , max_price = '1000' ,discount = '10'
09.WHERE  product ='X3753'
10.(select product,min_price ,max_price,discount
11.FROM promotion
12.where product = 'X3753'
13.and (
14.         
15.        (@min >= min_price and @min <= isnull(max_price,99999999)) or
16.        (@max >= min_price and @max <= isnull(max_price,99999999))
17.    )
18. 
19.)


เเต่ติดปัญหาตรงที่ พอเอาไปใส่ใน Visual studio เเล้ว พอกด update มันขึ้นเเจ้งเตือนว่าข้อมูลนั้นซ้ำก็จริง เเต่พอกด cancel ข้อมูลมันเดันเป็นข้อมูลที่เรากด update ไป!!




Code (VB.NET)
01.Public Function InsertProduct(ByVal Productid As Integer, CapMin As Decimal, CapMax As Decimal, CapDiscount As Decimal) As Boolean
02. 
03.        Dim reader2 As OleDbDataReader
04.        Dim comm2 As String
05.        comm2 = " UPDATE promotion"
06.        comm2 += " SET min_price = '" & CapMin & "' , max_price = '" & CapMax & "', discount = '" & CapDiscount & "' "
07.        comm2 += " where promotion_id = '" & Productid & "' "
08.        comm2 += " ( select product ,min_price,max_price,discount  "
09.        comm2 += " FROM promotion "
10.        comm2 += " where promotion_id = '" & Productid & "' "
11.        comm2 += " and (( '" & CapMin & "'  >= min_price and '" & CapMin & "' <= isnull(max_price,99999999)) "
12.        comm2 += " or ('" & CapMax & "' >= min_price and '" & CapMax & "' <= isnull(max_price,99999999)))) "
13. 
14.        Dim OleComm2 As New OleDbCommand(comm2, sqlconn)
15.        sqlconn.Open()
16.        reader2 = OleComm2.ExecuteReader(CommandBehavior.CloseConnection)
17.        If reader2.HasRows Then
18.            Return False
19.        Else
20.            Return True
21.        End If
22.    End Function



เรียกใช้...
Code (VB.NET)
01.Private Sub GridView_promotion_RowUpdating(sender As Object, e As GridViewUpdateEventArgs) Handles GridView_promotion.RowUpdating
02. 
03.       '   Dim cap_product_code As String = CType(GridView_promotion.Rows(e.RowIndex).Cells(3).Controls(0), TextBox).Text
04.       Dim cap_product_id As String = GridView_promotion.DataKeys(e.RowIndex).Item(0).ToString
05.       Dim cap_min As Decimal = CType(GridView_promotion.Rows(e.RowIndex).Cells(4).Controls(0), TextBox).Text
06.       Dim cap_max As Decimal = CType(GridView_promotion.Rows(e.RowIndex).Cells(5).Controls(0), TextBox).Text
07.       Dim cap_dis As Decimal = CType(GridView_promotion.Rows(e.RowIndex).Cells(7).Controls(0), TextBox).Text
08. 
09. 
10.       If InsertProduct(cap_product_id, cap_min, cap_max, cap_dis) Then
11.                           Using sqlconn As New OleDbConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
12.                   Dim cmd As New OleDbCommand()
13.                   cmd.Connection = sqlconn
14.                   'product = ?,
15.                   cmd.CommandText = "UPDATE promotion SET  min_price = ?, max_price = ?, discount = ? WHERE promotion_id = ?"
16.                   cmd.CommandType = CommandType.Text
17. 
18.                   Dim strpromotion_id As String = GridView_promotion.DataKeys(e.RowIndex).Item(0).ToString
19.                   Dim a As TextBox = GridView_promotion.Rows(e.RowIndex).Cells(4).Controls(0)
20.                   '  Dim strproduct As String = CType(GridView_promotion.Rows(e.RowIndex).Cells(3).Controls(0), TextBox).Text
21.                   Dim strminP As Decimal = CType(GridView_promotion.Rows(e.RowIndex).Cells(4).Controls(0), TextBox).Text
22.                   Dim strmaxP As Decimal = CType(GridView_promotion.Rows(e.RowIndex).Cells(5).Controls(0), TextBox).Text
23.                   Dim strDis As Decimal = CType(GridView_promotion.Rows(e.RowIndex).Cells(7).Controls(0), TextBox).Text
24. 
25. 
26.                   '  cmd.Parameters.Add("@p_product", OleDbType.VarChar).Value = strproduct
27.                   cmd.Parameters.Add("@p_min", OleDbType.Decimal).Value = strminP
28.                   cmd.Parameters.Add("@p_max", OleDbType.Decimal).Value = strmaxP
29.                   cmd.Parameters.Add("@p_dis", OleDbType.Decimal).Value = strDis
30.                   cmd.Parameters.Add("@p_id", OleDbType.Integer).Value = strpromotion_id
31.                   sqlconn.Open()
32.                   cmd.ExecuteNonQuery()
33.                   sqlconn.Close()
34.               End Using
35.               GridView_promotion.EditIndex = -1
36.               BindGridView()
37.               lblAdd.Visible = True
38.          
39.       Else
40.           Response.Write("โปรโมชั่นซ้ำ!!! ลองใส่ใหม่อีกทีละกัน ")
41. 
42.       End If
43.        
44. 
45. 
46.   End Sub



ประวัติการแก้ไข
2017-08-01 14:45:15
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-01 14:44:36 By : ewanbaloki
 

 

No. 2



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

Code
| idt | Min | Max | Vat | +---+-----+---------+-----------+ | A11 | 200 | 499.99 | 3% | | A11 | 500 | 1000 | 3% | | A12 | 500 | 1000 | 5% | | B13 | 0 | 999.99 | 3.5% | | B14 | 1000 | 1599.99 | 7% | | B16 | 1600 | NULL | 12% | | C10 | 900 | 2500 | 4% | +---+-----+---------+--------+


UPDATE เราต้องให้ database รู้ว่ากำลังแก้ที่ Index อะไร จึงต้องใช้ = เพื่อระบุ ถ้าใช้ => จะกลายเป็นช่วงๆไป

Code (VB.NET)
1.Dim comm2 As String
2.        comm2 = " UPDATE promotion"
3.        comm2 += " SET min_price = '" & 501 & "' , max_price = '" & 1002 & "', discount = '" & CapDiscount & "' "
4.        comm2 += " FROM promotion "
5.        comm2 += " where promotion_id = '" & A11 & "' "
6.        comm2 += " and   min_price and =" & 500
7.        comm2 += " and   max_price and =" & 1000


ผมไม่ถนัด SQL แต่ยังไง เราก็ต้องเอาค่า เก่ามาเป็น Index เพื่อให้ database รู้ว่าเราจะแก้แถวไหน
นั่นคือ ผมจะแก้ แถวที่มี promotion_id= A11 min_price = 500 max_price = 1000
โดย แก้เป็น min_price = 501 , max_price = 1002

ซึ่งวิธีนี้อาจจะเสี่ยงต่อการ error ได้

วิธีที่ง่ายกว่านั้นคือเพิ่ม ฟิลด์ ID มาใช้งาน แล้วก็แก้ตาม ID ได้เลย

ID| idt | Min | Max | Vat |
+---+---+-----+---------+-----------+
|001| A11 | 200 | 499.99 | 3% |
|002| A11 | 500 | 1000 | 3% |
|003| A12 | 500 | 1000 | 5% |
|004| B13 | 0 | 999.99 | 3.5% |
|005| B14 | 1000 | 1599.99 | 7% |
|006| B16 | 1600 | NULL | 12% |
|007| C10 | 900 | 2500 | 4% |
+---+-----+---------+--------+
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-01 15:46:00 By : lamaka.tor
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : คำสั่ง SQL ที่พอupdateข้อมูลในเเถว เเล้วถ้ามันซ้ำกับในช่วงจำนวนที่มีอยู่ ก็ไม่ให้ update
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)





ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2025 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่