Wednesday, March 16, 2016

Hướng dẫn mở cổng sql server 2008 R2

Nếu các bạn là sinh viên, các bạn sẽ ít quan tâm đến cổng trong sql. Nhưng khi các bạn tiếp xúc với công việc phần mềm các bạn sẽ biết tại sao khi cài đặt xong người ta sẽ phải mở cổng sql để kết nối. Mình đưa ra 2 lý do sau mà mình cho là cơ bản nhất:
1. Để tránh xung đột với các hệ thống cũ hoặc được cài mới cùng nền tảng.
2. Bảo mật thông tin hơn

Mình có hướng dẫn ở video dưới đây. Có gì thắc mắc hoặc góp ý mong các bạn vui lòng contact.



Monday, March 14, 2016

Auto backup database use Jobs in Sql server 2008

Hướng dẫn backup dữ liệu tự động hằng ngày trên sql server 2008 R2.

Monday, August 24, 2015

Xóa tất cả các table, procedure, view và trigger



Thỉnh thoảng¸ có những trường hợp, khi bạn muốn gỡ bỏ tất cả các bảng, các thủ tục, các view và trigger từ database của mình. Điều đó rất bình thường nếu bạn chỉ có 1-10 bảng hay thủ tục, bạn chỉ cần làm những thao tác đã được hỗ trợ trên Sql server managerment. Nhưng nếu bạn có đến hơn 100 table, procedure và view trong database của bạn, thì việc gỡ bỏ bằng những thao tác bình thường thật là khó chịu và tẻ nhạt. Trong bài viết này mình sẽ chia sẻ với các bạn một số script giúp các bạn gỡ bỏ table, procedure, view và trigger một cách nhanh chóng hơn.

Xóa tất cả table

  1. EXEC sp_MSforeachtable @command1 = "DROP TABLE ?"

Xóa tất cả Procedure do người dùng định nghĩa

  1. Declare @procName varchar(500)
  2. Declare cur Cursor For Select [name] From sys.objects where type = 'p'
  3. Open cur
  4. Fetch Next From cur Into @procName
  5. While @@fetch_status = 0
  6. Begin
  7. Exec('drop procedure ' + @procName)
  8. Fetch Next From cur Into @procName
  9. End
  10. Close cur
  11. Deallocate cur

Xóa bỏ các view

  1. Declare @viewName varchar(500)
  2. Declare cur Cursor For Select [name] From sys.objects where type = 'v'
  3. Open cur
  4. Fetch Next From cur Into @viewName
  5. While @@fetch_status = 0
  6. Begin
  7. Exec('drop view ' + @viewName)
  8. Fetch Next From cur Into @viewName
  9. End
  10. Close cur
  11. Deallocate cur

Xóa các trigger

  1. Declare @trgName varchar(500)
  2. Declare cur Cursor For Select [name] From sys.objects where type = 'tr'
  3. Open cur
  4. Fetch Next From cur Into @trgName
  5. While @@fetch_status = 0
  6. Begin
  7. Exec('drop trigger ' + @trgName)
  8. Fetch Next From cur Into @trgName
  9. End
  10. Close cur
  11. Deallocate cur
Trên đây là mình chia sẻ cách xóa tất cả Table, procedure, view và trigger. Trong nhiều trường hợp bạn chỉ muốn xóa những Table, procedure, view và trigger trong một giới hạn nào đó thì các bạn hãy điều chỉnh lại con trỏ lấy các dữ liệu nhé. Và các bạn đừng quên xác thực việc chắc chắn xóa bỏ chúng trước khi thực thi các câu lệnh trên.

Cảm ơn các bạn đã theo dõi. Nhớ đóng góp ý kiến tích cực cho mình nhé.

Monday, August 17, 2015

CSharp - Hướng dẫn làm tool import excel đơn giản

Trong nhiều trường hợp các bạn có dữ liệu từ một file excel nhưng ngại nhập lại hay dữ liệu từ file excel quá nhiều không thể nhập lại vào phần mềm được, mà có làm được thì cũng rất mất nhiều thời gian và trở nên nhiều quá trình. Điều đó đã được giải quyết bằng cách import toàn bộ dữ liệu đó một cách tự động vào phần mềm thông qua những phương thức hỗ trợ.
Sql Server cũng hỗ trợ các bạn import dữ liệu từ file excel vào, tuy nhiên nó sẽ lấy tất cả những gì file excel có và tạo ra một table có thể không như mong muốn của mình. Và tất nhiên là nó cũng không mấy trực quan để chúng ta kiểm tra dữ liệu.
Như vậy các bạn cũng nghĩ ngay đến việc là dùng chương trình tự mình viết ra và import theo cách của mình.
Import dữ liệu từ file excel thì sẽ tùy thuộc và file excel và dữ liệu cần lấy vào như thế nào. Tuy nhiên để muốn thực hiện các bước tùy biến cao hơn thì mình phải lấy được dữ liệu từ file excel vào trên khung nhìn của mình đã. Mình có làm một tool cơ bản đọc dữ liệu từ file excel vào datagrid thông qua thư viện microsoft.office.interop.excel. Đặc điểm khi các bạn làm import theo cách này thì khi chạy trên window nào cũng ok. Mời các bạn tham khảo.

Convert dữ liệu từ file dbf sang sql server

Nhiều phần mềm ngày trước đang sử dung ngôn ngữ lập trình FOX và lưu trữ dữ liệu bằng tệp tin .dbf. Vì một lý do nào đó bạn muốn xem dữ liệu từ tệp tin .dbf bằng sql server vì thực tế sql server cho ta cái nhìn dễ hơn, trực quan hơn và dễ thao tác hơn. Nhưng hiện tại sql server chưa hỗ trợ ta mở dữ liệu trực tiếp từ database .dbf như các database .mdf mà phải thông qua một provider VFPOLEDB.
Các bạn có thể download VFP tại đây: http://www.mediafire.com/download/779zh1gxg1e3rw2/VPF.rar

Sau khi cài đặt VFP thành công thì các bạn config lại sql server như sau:
USE [master]
GO
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO


USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'VFPOLEDB', N'AllowInProcess', 1
GO

Các bạn có thể tham khảo thêm:



Saturday, December 20, 2014

Định nghĩa, sử dụng của mệnh đề Group by và Having

Định nghĩa, sử dụng của mệnh đề Group by và Having

Trong sql server, chúng ta nhóm bởi mệnh đề nhóm các bản ghi của bảng dữ liệu theo cách chúng ta cần. Chúng ta sử dụng mệnh đề Having để lọc dữ liệu từ dữ liệu chúng ta đã sử dụng mệnh đề Group by. Mệnh đề Having hoạt động chỉ khi tồn tại mệnh đề Group by, nghĩa là để sử dụng mệnh đề having chúng ta cần mệnh đề Group by trước. Hãy xem qua cả hai mệnh đề.

Mệnh đề Group by

Group By được sử dụng cho việc nhóm các bản ghi của các bảng trong cơ sở dữ liệu. Mệnh đề này tạo thành một dòng tương ứng được nhóm và quá trình này được gọi là tập hợp. Để sử dụng mệnh đề Group by chúng ta phải sử dụng ít nhất một chức năng tổng hợp trong câu lệnh Select. Chúng ta có thể Group by với mệnh đề Where
Cấu trúc cho mệnh đề Group By
  1. SELECT Col1, Col2, Aggreate_function
  2. FROM Table_Name
  3. WHERE Condition
  4. GROUP BY Col1, Col2

Hãy nhìn mệnh đề Group By làm việc như thế nào. Giả sử chúng ta có một bảng StudentMarks với nội dung điểm cho mỗi đối tượng sinh viên (học sinh)
  1. Create table StudentMarks
  2. (
  3. st_RollNo int ,
  4. st_Name varchar(50),
  5. st_Subject varchar(50),
  6. st_Marks int
  7. )
  8. --Thêm dữ liệu cho bảng dữ liệu
  9. insert into StudentMarks(st_RollNo,st_Name,st_Subject,st_Marks)
  10. values(1,'Mohan','Physics',75);
  11. insert into StudentMarks(st_RollNo,st_Name,st_Subject,st_Marks)
  12. values(1,'Mohan','Chemistry',65);
  13. insert into StudentMarks(st_RollNo,st_Name,st_Subject,st_Marks)
  14. values(1,'Mohan','Math',70);
  15. insert into StudentMarks(st_RollNo,st_Name,st_Subject,st_Marks) values(2,'Vipul','Physics',70);
  16. insert into StudentMarks(st_RollNo,st_Name,st_Subject,st_Marks)
  17. values(2,'Vipul','Chemistry',75);
  18. insert into StudentMarks(st_RollNo,st_Name,st_Subject,st_Marks) values(2,'Vipul','Math',60);
  19. insert into StudentMarks(st_RollNo,st_Name,st_Subject,st_Marks)
  20. values(3,'Jitendra','Physics',85);
  21. insert into StudentMarks(st_RollNo,st_Name,st_Subject,st_Marks)
  22. values(3,'Jitendra','Chemistry',75);
  23. insert into StudentMarks(st_RollNo,st_Name,st_Subject,st_Marks)
  24. values(3,'Jitendra','Math',60);
  25. --Dùng câu lệnh select để xem dữ liệu của chúng ta
  26. select * from StudentMarks

  1. -- Mệnh đề Group By mà không sử dụng mệnh đề Where
  2. SELECT st_Name, SUM(st_Marks) AS 'Total Marks'
  3. FROM StudentMarks
  4. GROUP BY st_Name;

  1. -- Mệnh đề Group By kết hợp Where
  2. SELECT st_Name, SUM(st_Marks) AS 'Total Marks'
  3. FROM StudentMarks
  4. where st_Name='Mohan'
  5. GROUP BY st_Name;

  1. --Mệnh đề Group By để tìm sinh viên có điểm lớn nhất
  2. SELECT st_Subject,max(st_Marks) AS 'Max Marks in Subject'
  3. FROM StudentMarks
  4. GROUP BY st_Subject;

Mệnh đề Having

Mệnh đề này hoạt động chỉ khi sử dụng Group By trong các bảng dữ liệu và hành động tương ứng phép lọc "Like" trong mệnh đề Where . Chúng ta sử dụng mệnh đề Having để lọc dữ liệu đã được lấy từ mệnh đề Group By trước đó. Để sử dụng mệnh đề Having cần sử dụng mệnh đề Group By trước.
  1. -- Mệnh đề having mà không có điều kiện Where
  2. SELECT st_Name, SUM(st_Marks) AS 'Students Scored > 205'
  3. FROM StudentMarks
  4. GROUP BY st_Name
  5. HAVING SUM(st_Marks) > 205

  1. -- Sử dụng Having và Where
  2. SELECT st_Name, SUM(st_Marks) AS 'Students Scored > 205'
  3. FROM StudentMarks
  4. where st_RollNo between 1 and 3
  5. GROUP BY st_Name
  6. HAVING SUM(st_Marks) > 205

Lưu ý

  1. Để sử dụng mệnh đề Group By, chúng ta cần ít nhất một hàm tổng hợp trong sql server.
  2. Tất cả các cột được sử dụng bởi các hàm phải có trong danh sách Group By
  3. Chúng ta có thể sử dụng Group By có thể có hoặc không có mệnh đề Where.
  4. Để sử dụng Having chúng ta phải sử dụng Group By trước
Tóm lại
Trong bài viết này tôi cố gắng giải thích về mệnh đề Group By và Having. Tôi hi vọng sau khi đọc bài viết này bạn sẽ quen với mệnh đề Group By và Having. Tôi muốn nhận được phản hồi từ những người đọc qua blog của tôi. Vui lòng gửi phản hồi, câu hỏi hoặc bình luận về bài viết này. Đấy là những đóng góp đáng quý để tôi viết tiếp các bài viết khác đầy đủ hơn. Cảm ơn!

Tuesday, December 2, 2014

Thực hành làm việc với câu lệnh SELECT P1

Một bảng lưu thông tin khách hàng như trên. Viết các câu lệnh SQL để thực hiện các yêu cầu sau:

1. Lấy toàn bộ thông tin khách hàng (quá dễ)
2. Lấy thông tin khách hàng có tên bắt đầu là "N" (cũng quá dễ)
3. Lấy thông tin khách hàng có tên gồm 15 ký tự ( Cũng dễ )
4. Lấy thông tin khách hàng có tên dài nhất, ngắn nhất
5. Lấy thông tin khách hàng có địa chỉ email là gmail (biết gmail có đuôi là @gmail.com)
6. Đếm số khách hàng có địa chỉ email là gmail
7. Lấy thông tin những khách hàng nam và >30 tuổi
8. Lấy thông tin những khách hàng nữ và <30 tuổi
9. Lấy thông tin khách hàng có năm sinh từ 1945 đến 1972
10. Lấy thông tin khách hàng có tuổi lớn nhất, bé nhất
11. Lấy thông tin những khách hàng có ngày sinh là cuối tháng trong năm