แสดงบทความที่มีป้ายกำกับ SQL Server แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ SQL Server แสดงบทความทั้งหมด

วันจันทร์ที่ ๑๗ ธันวาคม พ.ศ. ๒๕๕๐

ปัญหาจากการ Attach ไฟล์ใน SQL Server เมื่อมีการเคลื่อนย้ายไฟล์ (Attach files problem in SQL Server 2005)

SQL Server นั้น สามารถเคลื่อนย้ายฐานข้อมูลได้หลายวิธี ซึ่งหนึ่งในนั้น คือ การใช้ขบวนการ attach/detach จากไฟล์ .mdf และ .ldf ที่นิยมกันมาก เพราะง่ายและสะดวก (แต่จะไม่สะดวกถ้าฐานข้อมูลมีข้อมูลจำนวนมาก เพราะทำให้ไฟล์มีขนาดใหญ่) แต่ปัญหาที่พบกันมากคือ เมื่อนำไฟล์ฐานข้อมูลไป attach ไว้อีกเครื่อง diagrams จะไม่สามารถใช้ได้ โดยจะมีคำเตือนขึ้นว่า "Database diagram support objects cannot be installed because this database does not have a valid owner. To continue, first use the File page of the Database Properties dialog box or the ALTER AUTHORIZATION statement to set database owner to a valid login, then add the database diagram support objects." อีกปัญหาคือย้าย path ของไฟล์ฐานข้อมูล (โดย copy หรือ cut ก็ตาม) ก็จะพบปัญหาการ login ไม่สำเร็จอีกเช่นกัน

ปัญหานี้สามารถแก้ไขได้โดยการสร้างสิทธิ์ให้ user ที่ต้องการ ให้สามารถเข้าถึงฐานข้อมูลนั้นได้ โดยใช้คำสั่ง

ALTER AUTHORIZATION ON DATABASE::database_name TO valid_login

database_name หมายถึง ฐานข้อมูลที่มีปัญหา ส่วน valid_login หมายถึง user ที่ต้องการกำหนดสิทธิ์

ถ้ายังไม่มี user สำหรับการเข้าถึงฐานข้อมูลนั้น ให้สร้าง user ในโฟลเดอร์ Security (ไม่ใช่ Security ในฐานข้อมูลนั้นนะครับ) คลิ๊กขวาที่โฟลเดอร์ Logins เพื่อเลือก New Login แล้วค่อยใช้คำสั่งด้านบนให้สิทธิ์แก่ user ใหม่ที่สร้างขึ้น

และสุดท้าย อย่าลืม stop services ก่อน เคลื่อนย้ายหรือก็อปปี้นะครับ ไม่งั้นจะโดนเตือนแบบนี้ครับ


แหล่งข้อมูล :
Understanding Database Diagram Ownership

วันจันทร์ที่ ๒๖ พฤศจิกายน พ.ศ. ๒๕๕๐

เทคนิคการทำ multiple query ใน connection เดียว โดยใช้ MARS ใน ADO.NET 2.0 (Multiple active result sets - MARS)

ส่วนใหญ่แอพพลิเคชั่นที่ต้องติดต่อฐานข้อมูล เรามักจะสร้าง DataAccess Layer มาเป็นตัวจัดการกับฐานข้อมูล แทนที่จะติดต่อโดยตรง ซึ่งตัว DatAccess นี้ ก็ต้องใช้ ADO.NET ที่มี Connection object เป็นตัวระบุฐานข้อมูล ซึ่งการ query หรือ insert, update, delete แต่ละครั้ง (รวมทั้งการ call Store Procedure ด้วย) ก็ต้องเปิด/ปิด connection ทุกครั้ง ถ้ามีการติดต่อกับฐานข้อมูลถี่มากๆ จะทำให้ประสิทธิภาพโดยรวมลดลง เพราะต้องใช้ bandwidth ของระบบเครือข่ายมากขึ้น ผมเคยแอบ query หลายๆ ครั้งใน connection เดียว ผลที่ได้คือ ระบบเตือนว่า "There is already an open DataReader associated with this Connection which must be closed first."

ทางแก้คือ ใช้เทคนิคการสร้าง connection ด้วย MARS (Multiple Active Result Sets) เทคนิคนี้ใช้ได้เฉพาะ SQL Server 2005 กับ ADO.NET 2.0 เท่านั้น (เวอร์ชั่นต่ำกว่านี้ทำไม่ได้) วิธีการก็แสนง่าย แค่ระบุ MultipleActiveResultSets=True เพิ่มเข้าไปใน Connection String เท่านั้นเอง เช่น

"Server=myServerAddress;Initial Catalog=TestDatabase;User Id=admin;Password=1234;User Instance=False;MultipleActiveResultSets=True"

แหล่งข้อมูล :
Connection String (SQL Server 2005)
ADO.NET 2.0 Multiple Active Resut Sets per connection in Sql Server 2005
Multiple Active Result Sets (MARS) in SQL Server 2005
Developing Client Applications with ADO .NET 2.0
Execute Multiple Queries on a Single Connection
Teach Old Data New Tricks with the Fully Loaded Advances in ADO.NET 2.0

วันอังคารที่ ๑๘ กันยายน พ.ศ. ๒๕๕๐

Northwind อยู่ไหน (Where is northwind in SQL Server 2005?)

สำหรับคนที่ใช้ผลิตภัณฑ์ฐานข้อมูลของไมโครซอฟต์ ไม่ว่าจะเป็น MS Access, SQL Server 7.0, 2000 คงคุ้นเคยกับฐานข้อมูลตัวอย่างที่มีมาให้ในชื่อ Northwind และ แต่สำหรับ SQL Server 2005 กลับหายไป ผมเพิ่งสังเกตตอนจะใช้ทดสอบโปรแกรม พอหาข้อมูลก็รู้ว่า ทางไมโครซอฟต์เก็บไว้ในลิ้นชักไปแล้วครับ เพราะว่าไม่ใช่ตัวอย่างที่ดีพอในการ implement ตัว analysis services หรือ reporting services (แต่ในรุ่น SQL Server Compact Edition ยังใช้ northwind อยู่ครับ) แต่ก็พอหาโหลด northwind ได้ที่ Northwind and pubs Sample Databases for SQL Server 2000 แต่กระนั้นทางไมโครซอฟต์ก็แนะนำว่าถ้าใช้ SQL Server 2005 ก็ใช้ฐานข้อมูลตัวอย่างตัวใหม่ดีกว่า ในชื่อ AdventureWorks ซึ่งไปเก็บไว้ใน codeplex ตามไป download ได้ที่ Microsoft SQL Server Samples and Community Projects ในโครงการนี้ยังพบตัวอย่างอีกหลายๆ script หรือข้อมูลที่ใช้กับ Analysis Services, Integration Services (DTS), Reporting Services, Transact SQL Scripts, XML etc. ถ้าขี้เกียจอ่านอะไรมากมายก็มาลิ้งนี้เลยดีกว่าครับ Sample Databases for Microsoft SQL Server 2005 SP2 licensed with the MS-PL license.

ปล. การใช้ northwind ใน SQL Server 2005 ต้องเซต properties ฐานข้อมูลให้ใช้ 90 compatibility level ก่อนนะครับ หรือลองอ่านเพิ่มเติมที่ NorthWind Database for SQL Server 2005 and installation method

แหล่งข้อมูลเพิ่มเติม :
Download details: SQL Server 2005 Compact Edition Developer SDK
Where is the Northwind SQL scripts for SQL server 2005
Sample Databases in SQL Server 2005 - Jeff Atwood blog
SQL SERVER - 2005 NorthWind Database or AdventureWorks Database - Samples Databases - Pinal Dave