Giải quyết vấn đề lỗi không thể kết nối trong SQL Server

Vấn đề:
Thỉnh thoảng bạn gặp những báo lỗi sau về kết nối:
ERROR: (provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server) (Microsoft SQL Server, Error:) An error has occurred while establishing a connection to the server. (provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 5)
Hoặc:
An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 1326)
Hoặc:
SQL Server) (Microsoft SQL Server, Error:) An error has occurred while establishing a connection to the server. (provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 5)
Những lỗi này xuất hiện với cả hai phương thức kết nối Name Pipe và TCP/IP. Trong bài này chúng ta sẽ xem xét tất cả các vấn đề dẫn đến các lỗi này và cách giải quyết.
Giải pháp:
Có một số lý do dẫn đến các lỗi này, và bạn cần theo các bước sau để kiểm tra một cách tòan diện vấn đề kết nối:

Đọc thêm »

Script đơn giản để tạo chuỗi các giá trị tìm kiếm

Giả sử chúng ta có một bảng có cột chứa các giá trị tìm kiếm và chúng ta muốn kết nối các giá trị trong cột này thành một chuỗi giá trị tìm kiếm được phân cách bởi dấu ‘,’. Chúng ta có thể sử dụng phương pháp truyền thống là CURSOR hoặc vòng lặp WHILE. Tuy nhiên chúng ta có một cách đơn giản hơn nhiều là sử dụng phương pháp khá tệ là CURSOR để quét qua toàn bộ bảng.

Đọc thêm »

Một số lưu ý để cải thiện hiệu năng

Tinh chỉnh hiệu suất thực thi (Performance tuning) là một vấn đề khó và không có một quy tắc vàng nào cả. Tuy nhiên bạn có thể bước một bước dài một cách ngạc nhiên trong vấn đề này nếu theo một số nguyên tắc cơ bản trong bài này.
Về mặt lý thuyết, việc điều chỉnh hiệu năng được thực hiện bởi các DBA. Tuy nhiên họ sẽ không có đủ thời gian để rà soát lại tất cả mọi thay đổi của các procedure, do đó học một số kiến thức căn bản về điều chỉnh thực thi sẽ giúp bạn tiết kiệm thời gian cho việc phải làm việc lại với các mã nguồn.

Sau đây là danh sách 15 gợi ý cơ bản nhất mà bất kỳ một develope nào cũng cần phải thực hiện trong khóa học về điều chỉnh hiệu năng, thực hiện những điều này không đảm bảo hiệu năng sẽ được cải thiện một cách chắc chắn, nhưng ít ra nó cũng không làm cho hệ thống chậm đi.

Đọc thêm »

Backup database nâng cao bằng PowerShell

Vấn đề :
Bài viết này sẽ mô tả một ví dụ trong đó chúng ta có một scrip chạy mỗi ngày một lần thực hiện việc full backup, xác nhận công việc sao lưu, copy chúng qua mạng LAN, thực hiện việc lưu trữ và gửi thông báo về công việc qua email. Ngoài ra còn có một tùy chọn để tải các bản backup lên một máy chủ FTP. 
Giải pháp:  
Để thực hiện tòan bộ công việc trên, bản thân một mình SQL Server không thực hiện được mà chúng ta dùng đến một ứng dụng gọi là PowerShell. Có một thủ tục để thực hiện việc sao lưu và phục hồi CSDL là bước đầu tiên và quan trọng nhất trong việc bảo đảm an toàn dữ liệu của tổ chức, doanh nghiệp trong trường hợp ổ cứng bị hỏng hoặc mất sự kiểm soát máy chủ chứa dữ liệu. Một trong những phương pháp được ưa thích của nhiều nhà quản trị mạng và các DBA chuyên nghiệp để thực hiện việc sao lưu CSDL là sử dụng PowerShell và Shared Management Objects (SMO), được thực hiện từ Windows Task Scheduler. Sau đây là một ví dụ cụ thể.

Đọc thêm »

Lấy ngày đầu tháng, ngày cuối tháng

Vấn đề : Làm sao lấy ngày đầu tháng, ngày cuối tháng tháng trước, tháng sau của tháng hiện tại?
Giải pháp: Sử dụng các hàm  ngày tháng. Như ví dụ sau:

DECLARE @mydate DATETIME

SELECT @mydate = GETDATE()
SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(@mydate)),@mydate),101) ,
‘Ngày cuối tháng trước’
UNION
SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(@mydate)-1),@mydate),101) AS Date_Value,
‘Ngày đầu tháng hiện tại’ AS Date_Type
UNION
SELECT CONVERT(VARCHAR(25),@mydate,101) AS Date_Value, ‘hôm nay’ AS Date_Type
UNION
SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@mydate))),DATEADD(mm,1,@mydate)),101) ,
‘Ngày cuối tháng này’
UNION
SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@mydate))-1),DATEADD(mm,1,@mydate)),101) ,
‘Ngày đầu tháng tiếp theo’
GO

Xóa các dòng trùng nhau

Vấn đề:Trong rất nhiều trường hợp, chúng ta gặp một vấn đề nhỏ nhưng không nhỏ đó là các dòng trùng nhau trong một bảng. Vậy làm thế nào để xóa các dòng trùng nhau này.

Giải pháp:
Tạo bảng và insert vào bảng theo ví dụ sau:

if OBJECT_ID(‘MailList’) is not null drop table MailList
go
create table MailList
(
id int identity not null,
mail_add varchar(100) not null,
      Name Nvarchar(50) default () not null,
)
go
insert MailList (mail_add, Name)
      values
      (‘mailA@gmail.com’, ‘Nguyen van A’),
      (‘mailB@gmail.com’, ‘Nguyen van B’),
      (‘mailA@gmail.com’, ‘Nguyen Van A’)
     

   
Cột mail_add có hai mail trùng nhau đều là mailA. Để xóa bớt một dòng, dùng câu lệnh sau:

delete from MailList
      where id not in (select MAX(ID) from MailList group by mail_add)