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,027

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



 

คำสั่ง 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 : 945 Reply : 2
 

 

No. 1



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



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


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

Code (SQL)
declare @min decimal(10,2) = 800
declare @max decimal(10,2) = 5000




UPDATE  promotion
SET     min_price = '800' , max_price = '1000' ,discount = '10'
WHERE  product ='X3753'
(select product,min_price ,max_price,discount
FROM promotion 
where product = 'X3753'
and (
		
		(@min >= min_price and @min <= isnull(max_price,99999999)) or
		(@max >= min_price and @max <= isnull(max_price,99999999))
	)

)


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




Code (VB.NET)
Public Function InsertProduct(ByVal Productid As Integer, CapMin As Decimal, CapMax As Decimal, CapDiscount As Decimal) As Boolean

        Dim reader2 As OleDbDataReader
        Dim comm2 As String
        comm2 = " UPDATE promotion"
        comm2 += " SET min_price = '" & CapMin & "' , max_price = '" & CapMax & "', discount = '" & CapDiscount & "' "
        comm2 += " where promotion_id = '" & Productid & "' "
        comm2 += " ( select product ,min_price,max_price,discount  "
        comm2 += " FROM promotion "
        comm2 += " where promotion_id = '" & Productid & "' "
        comm2 += " and (( '" & CapMin & "'  >= min_price and '" & CapMin & "' <= isnull(max_price,99999999)) "
        comm2 += " or ('" & CapMax & "' >= min_price and '" & CapMax & "' <= isnull(max_price,99999999)))) "

        Dim OleComm2 As New OleDbCommand(comm2, sqlconn)
        sqlconn.Open()
        reader2 = OleComm2.ExecuteReader(CommandBehavior.CloseConnection)
        If reader2.HasRows Then
            Return False
        Else
            Return True
        End If
    End Function



เรียกใช้...
Code (VB.NET)
 Private Sub GridView_promotion_RowUpdating(sender As Object, e As GridViewUpdateEventArgs) Handles GridView_promotion.RowUpdating

        '   Dim cap_product_code As String = CType(GridView_promotion.Rows(e.RowIndex).Cells(3).Controls(0), TextBox).Text
        Dim cap_product_id As String = GridView_promotion.DataKeys(e.RowIndex).Item(0).ToString
        Dim cap_min As Decimal = CType(GridView_promotion.Rows(e.RowIndex).Cells(4).Controls(0), TextBox).Text
        Dim cap_max As Decimal = CType(GridView_promotion.Rows(e.RowIndex).Cells(5).Controls(0), TextBox).Text
        Dim cap_dis As Decimal = CType(GridView_promotion.Rows(e.RowIndex).Cells(7).Controls(0), TextBox).Text


        If InsertProduct(cap_product_id, cap_min, cap_max, cap_dis) Then
                            Using sqlconn As New OleDbConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
                    Dim cmd As New OleDbCommand()
                    cmd.Connection = sqlconn
                    'product = ?,
                    cmd.CommandText = "UPDATE promotion SET  min_price = ?, max_price = ?, discount = ? WHERE promotion_id = ?"
                    cmd.CommandType = CommandType.Text

                    Dim strpromotion_id As String = GridView_promotion.DataKeys(e.RowIndex).Item(0).ToString
                    Dim a As TextBox = GridView_promotion.Rows(e.RowIndex).Cells(4).Controls(0)
                    '  Dim strproduct As String = CType(GridView_promotion.Rows(e.RowIndex).Cells(3).Controls(0), TextBox).Text
                    Dim strminP As Decimal = CType(GridView_promotion.Rows(e.RowIndex).Cells(4).Controls(0), TextBox).Text
                    Dim strmaxP As Decimal = CType(GridView_promotion.Rows(e.RowIndex).Cells(5).Controls(0), TextBox).Text
                    Dim strDis As Decimal = CType(GridView_promotion.Rows(e.RowIndex).Cells(7).Controls(0), TextBox).Text


                    '  cmd.Parameters.Add("@p_product", OleDbType.VarChar).Value = strproduct
                    cmd.Parameters.Add("@p_min", OleDbType.Decimal).Value = strminP
                    cmd.Parameters.Add("@p_max", OleDbType.Decimal).Value = strmaxP
                    cmd.Parameters.Add("@p_dis", OleDbType.Decimal).Value = strDis
                    cmd.Parameters.Add("@p_id", OleDbType.Integer).Value = strpromotion_id
                    sqlconn.Open()
                    cmd.ExecuteNonQuery()
                    sqlconn.Close()
                End Using
                GridView_promotion.EditIndex = -1
                BindGridView()
                lblAdd.Visible = True
          
        Else
            Response.Write("โปรโมชั่นซ้ำ!!! ลองใส่ใหม่อีกทีละกัน ")

        End If
        


    End Sub









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


 

No. 2



โพสกระทู้ ( 4,436 )
บทความ ( 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)
Dim comm2 As String
        comm2 = " UPDATE promotion"
        comm2 += " SET min_price = '" & 501 & "' , max_price = '" & 1002 & "', discount = '" & CapDiscount & "' "
        comm2 += " FROM promotion "
        comm2 += " where promotion_id = '" & A11 & "' "
        comm2 += " and   min_price and =" & 500 
        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 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

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