วันศุกร์ที่ 20 มิถุนายน พ.ศ. 2557

SQLServer : จัดการค่า NULL

NULL เป็นปัญหาถ้าไม่จัดการให้ดี

SELECT unit * quantity AS total FROM .....
มีปัญหาเกิด error ถ้าค่า unit หรือ quantity เป็นค่า NULL 

วิธีแก้ 

1. ตอน design table ให้กำหนดค่า Default value=0 และ ห้ามเป็นค่า NULL (Allow Nulls=false)


2. หรือใช้ function ช่วย 
      2.1 ISNULL(fieldname, value_replace_IF_null)
 
               เช่น 
                      SELECT (ISNULL(unit,0) * ISNULL(quantity,0)) AS total FROM.......

      2.2 COALESCE(express1,express2, ....) คืนค่า  express ตัวแรกที่ไม่ใช่ค่า NULL หรือ 
คืนค่า NULL ถ้า express ทั้งหมดเป็นค่า NULL

เช่น 
SELECT COALESCE(NULL,NULL,300,200,NULL) จะได้ค่า 300

จากตัวอย่างข้างบน 
                      SELECT (COALESCE(unit,0) * COALESCE(quantity,0)) AS total FROM.......

นอกจากนี้ยังมีปัญหาการทดสอบค่า NULL

                ....WHERE  unit_code <>  NULL จะใช้ไม่ได้ต้องเขียนแบบนี้
               .... WHERE  unit_code IS NOT NULL  หรือ  
              .......WHERE NOT ISNULL(unit_code)



วันจันทร์ที่ 16 มิถุนายน พ.ศ. 2557

sqlserver : Update First N Record

Update First N Record

ต้องการ update 10 Record แรก


WITH First10Rows AS
(
  SELECT TOP 10 Col1,Col2,Col3,...
  FROM MyTable
  WHERE Col..= .....
  ORDER BY SomeDateColumn
)
UPDATE First10Rows
SET Col1=..., Col2=...

วันศุกร์ที่ 6 มิถุนายน พ.ศ. 2557

asp.net : Gridview Footer

การใช้งาน Footer ใน gridview ของ asp.net

ต้องการ





 ใน event RowDataBound ของ gridview

 Protected Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
        ' check row type
        If e.Row.RowType = DataControlRowType.DataRow Then
            ' if row type is DataRow, add RoomNumber value to TotalSales
            TotalRoomNumber += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "RoomNumber"))
        ElseIf e.Row.RowType = DataControlRowType.Footer Then
            ' If row type is footer, show calculated total value
            e.Row.Cells(4).Text = "รวม"
            e.Row.Cells(5).Text = TotalRoomNumber.ToString("d")
            e.Row.Cells(4).HorizontalAlign = HorizontalAlign.Center              e.Row.Cells(5).HorizontalAlign = HorizontalAlign.Center
            e.Row.Font.Bold = True  
        End If
    End Sub