Tag Database

[SQL SERVER] วิธีแก้ Error: 15138 – The database principal owns a schema in the database, and cannot be dropped

Microsoft SQL Server

เมื่อวันก่อนได้งานจากหัวหน้าให้เขียน Script เพื่อจัดการ User กับสิทธิื หลังการ Restore ฐานข้อมูล เมื่อลองเขียนคำสั่งเพื่อ Drop User พบ Error Message ดังนี้ The database principal owns a schema in the database, and cannot be dropped. (Microsoft SQL Server, Error: 15138) จาก Error Message ด้านบน สามารถสรุปสาเหตุของปัญหานั้น เกิดจาก User…

[SQL Server] การสร้าง Function ใช้เองใน Database ของเรา ตอนที่ 2(Scalar-valued Function )

Microsoft SQL Server

จากบทความที่แล้วที่ผมได้แนะนำเรื่องการสร้างฟังก์ชั่นใช้เองใน Database (User-Defined Function)ของเรา วันนี้ผมมาแนะนำการสร้างฟังก์ชั่นรูปแบบแรก Scalar-valued Function กันนะครับ Scalar-valued Function คือ อะไร Scalar-valued Function คือ ฟังก์ชั่นที่คืนค่าเป็นข้อมูลชนิดพื้นฐานเพียงตัวเดียว เช่น datetime, int ยกเว้นชนิดข้อมูลแบบ text, ntext, image หรือ timestamp ที่ไม่สามารถสั่งให้คืนค่าได้ โดยการเรียกใช้สามารถเรียกใช้แบบเดียวกันกับฟังก์ที่เคยใช้งานมา โดยส่วนชื่อคอลัมน์ที่ต้องการเข้าไป เช่น SUM, Max เป็นต้น การสร้าง Scalar-valued Function ใน MS SQL Server เริ่มสร้าง Function ซึ่งเราสามารถสร้าง Scalar-valued…

[SQL Server] การสร้าง Function ใช้เองใน Database ของเรา ตอนที่ 1(แนะนำ)

Microsoft SQL Server

ปกติแล้ว DBMS จะมีฟังค์ชั่นพื้นฐานในด้านต่างๆมาให้ในระดับนึงได้ อาทิ เช่น ฟังก์ชั่นด้านตัวเลข ได้แก่ SUM, AVG เป็นค้น ฟังก์ชั่นด้านตัวอักษร ได้แก่ Trim(), Replace เป็นต้น แต่บางครั้งงานบางชนิด ฟังก์ชั่นเหล่านี้ไม่สามารถตอบโจทย์ หรือ Business Rule ที่เราต้องการได้ ซึ่งตัว SQL Server หรือ DBMS ตัวอื่น ได้อนุญาตให้เราสร้างฟังก์ชั่นใช้เองได้ หรือ เรียกว่า User-Defined Function (ผมเน้นไปในตัว SQL Server) โดยสามารถสร้างฟังก์ชั่นได้ 3 ลักษณะ ดังนี้ Scalar-valued Function…

[MSSQL] SQL บวก ลบวันที่ โดยใช้ DATEADD

Microsoft SQL Server

วันนี้ผมได้งานจากที่่ทำงานมาให้เขียน Query เพื่อแจ้งเตือนสินค้าที่หมดอายุล่วงหน้าตามวันที่กำหนดไว้ ระหว่างวันที่กำหนดจนถึงจำนวนวันที่แจ้งเตือนล่วงหน้า โดยเอาผลลัพธ์ที่ได้มาจัดโปรโมชั่นลดแลกแจกแถมกัน (สมมติว่าเป็น 7 วัน) เลยเป็นที่มาของ Blog “[MSSQL] SQL บวก ลบวันที่ โดยใช้ DATEADD” โดยผมค่อยๆแนะนำไปทีละขั้นตอน ดังนี้ เตรียมข้อมูล

[SQL Server] SELECT เมื่อพบข้อมูลวันที่เป็น 1990-01-01 ให้แสดงเป็น String ว่าง

Microsoft SQL Server

ปัญหาที่ได้เจอวันนี้ คือ SELECT ข้อมูลวันที่ ที่บาง Record เก็บข้อมูลไม่ได้มีการเก็บข้อมูลวันที่ แต่ผลลัพธ์ที่ได้กลับเป็น 01-Jan-1990 (SQL Server ใจดีใส่ให้) ถ้าหาก User มาเห็นคงตกใจ คิดว่าระบบงานของเราเกิด Defect ชิ้นใหญ่แน่นอน เลยได้เป็นที่มาของ Blog SELECT เมื่อพบข้อมูลวันที่เป็น 1990-01-01 ให้แสดงเป็น String ว่าง เตรียมข้อมูล ความต้องการ

[SQL Server] เชื่อหรือไม่ว่า SQL เอาตัวเลขมาลบกันได้

Microsoft SQL Server

พอดีวันนี้งานที่ทำมีโจทย์ให้ว่าให้หาข้อมูลการซื้อ(BUY) และข้อมูลการขาย (SELL)  ณ ช่วงเวลาหนึ่ง เพื่อหาจำนวนสินค้าที่มีเรามีถืออยู่ (On Hand) ข้อมูลโครงสร้างตารางต่างๆ เลยได้เป็นที่มาของ Blog เชื่อหรือไม่ว่า SQL เอาตัวเลขมาลบกันได้ ทำงานแรกๆ เตรียมข้อมูล ความต้องการ(โจทย์) จากข้อมูลการซื้อ(BUY) และข้อมูลการขาย (SELL)  ณ ช่วงเวลาหนึ่ง(ระหว่างวันที่ 01-OCT-2013 ถึง 10-OCT-2013) เพื่อหาจำนวนสินค้าที่มีเรามีถืออยู่ (On Hand) วิธีการแก้ปัญหา หากติดความจากโจทย์เราสามารถแบ่งออกเป็น Query ย่อยๆ ได้ดังนี้ สรุป ภาษา SQL ทำอะไรได้มากกว่าที่คุณคิด เพียงแค่ต้องรู้จักลองและทดสอบ จากตัวอย่างนี้หลักทีใช้ คือ…

[SQL Server] SELECT แปลง Column ที่เป็น null ให้เป็น 0

Microsoft SQL Server

หลายครั้งที่ต้องเจองานในการเขียน SQL ประเภทการหาผลรวม (SUM) ของรายการ ตามเงื่อนไข A, B, C, D และอื่นๆจิปาถะ ลองมาดูตัวอย่างกัน เตรียมข้อมูล ความต้องการ(โจทย์) มาดูโจทย์ เราต้องการหาผลรวมของ Unit เฉพาะรายการขาย(BUY) ที่ยืนยันแล้ว(ISCONFIRM) และมีวันขายสินค้าระหว่างวันที่ 1-Oct-2013 ถึง วันที่ 10-Oct-2013 โดยสามารถเขียน Query ได้ ดังนี้ ปัญหา หากเรามีรายการใหม่ขึ้นมา ได้แก่การ รายการประเภทซื้อเชื่อ(BUY_CREDIT) พอทดสอบ Query พบว่าได้ค่า NULL เพราะ ไม่มีข้อมูลที่ตรงตามเงื่อนไข แต่ถ้าระบบส่งข้อมูลยังโปรแกรมที่เราพัฒนาขึ้น USER…

[SQL Server] ปัญหา row cannot be located for updating. some values may have been changed since it was last read

Microsoft SQL Server

ปัญหา row cannot be located for updating. some values may have been changed since it was last read สาเหตุ เกิดจากการตารางที่โปรแกรม หรือ App ที่เรากำลังพัฒนาได้ถูกใช้งานอยู่ หากใครเคยเรียน DB มา มีศัพท์เทคนิคอีกย่างนึง เรียกว่า Isolation Level นั้นเอง โดยสามารถเกิดได้จาก 2 กรณี ดังนี้ วิธีการแก้ไข กรณีที่ 1: ให้ตรวจสอบตารางที่เกี่ยวข้องกับหน้าจอนั้น ว่ามี Trigger…

[SQL Server] SELECT * FROM TABLE WHERE 1 > 2

SELECT * FROM TABLE WHERE 1 > 2 คือ อะไร เวลาทำงานหลายคนอาจจะเจอ SQL แปลกๆ เช่น Q: WHERE 1 > 2 คือ อะไร ?A: คือ การ SELECT ข้อมูล RECORD เปล่าขึ้นมา เพื่ออัปเดต หรือ ทำเป็น TEMP Table เพื่อการใช้งานต่อไป ตัวอย่างการใช้งาน – SELECT RECORD เปล่าขึ้นมา Update…

[MSSQL] การ Restore Database จากไฟล์ .bak

Microsoft SQL Server

ในบางครั้งเวลาที่เราทำงาน อาจจะต้องเอาไฟล์ Database จากที่อื่นมาใช้งาน หาก Detach ออกมาก็ทำให้ Database ตัวเดิมนั้นใช้งานไม่ได้ด้วย ตอนนี้ผมนำเสนอวิธี Restore Database จากไฟล์ .Bak ตามขั้นตอนต่อไปนี้ครับ