Wednesday, May 17, 2017

Functions: Excel vs MS Access vs SQL Server

(Anhgolden's Blog) - Tổng hợp

1. Hàm tìm kiếm chuỗi (Search or Find): Trả kết quả False hoặc Vị trí tìm được. Riêng SQL Server kết quả từ 0 đến N (Vị trí tìm được).

Excel: =Find(Str_searched, InString, [Start])

MS Access: InStr([Start], InString, Str_searched)

SQL Server: CharIndex(Str_searched, InString, [Start])

2. Hàm chuyển đổi chuỗi số sang số (Text to number):

Excel: =Value(text)

MS Access: Val(text)

SQL Server: Convert(Int, text)

3. Hàm lấy 1 phần tử trong chuỗi

Excel: Mid(String,Start,Length)

MS Access: Mid(String,Start,Length)

SQL Server: SubString(String,Start,Length)



Read More »

Monday, March 6, 2017

Cho và Nhận

(Anhgolden's Blog) - Sưu tầm

Trên đường đi, hai người bắt gặp một đôi giày cũ nằm giữa đường. Họ cho rằng đó là đôi giày của một nông dân nghèo làm việc ở một cánh đồng gần bên, có lẽ ông ta đang chuẩn bị kết thúc ngày làm việc của mình.

Anh sinh viên quay sang nói với vị giáo sư: "Chúng ta hãy thử trêu chọc người nông dân xem sao. Em sẽ giấu giày của ông ta rồi thầy và em cùng trốn vào sau những bụi cây kia để xem thái độ ông ta ra sao khi không tìm thấy đôi giày."
Vị giáo sư ngăn lại: "Này, anh bạn trẻ, chúng ta đừng bao giờ đem những người nghèo ra để trêu chọc mua vui cho bản thân. Nhưng em là một sinh viên khá giả, em có thể tìm cho mình một niềm vui lớn hơn nhiều nhờ vào người nông dân này đấy. Em hãv đặt một đồng tiền vào mỗi chiếc giày của ông ta và chờ xem phản ứng ông ta ra sao."

Người sinh viên làm như lời vị giáo sư chỉ dẫn, sau đó cả hai cùng trốn vào sau bụi cây gần đó.

Chẳng mấy chốc người nông dân đã xong việc và băng qua cánh đồng đến nơi đặt giày và áo khoác của mình. Người nông dân vừa mặc áo khoác vừa xỏ chân vào một chiếc giày thì cảm thấy có vật gì cứng cứng bên trong, ông ta cúi xuống xem đó là vật gì và tìm thấy một đồng tiền. Sự kinh ngạc bàng hoàng hiện rõ trên gương mặt ông. Ông ta chăm chú nhìn đồng tiền, lật hai mặt đồng tiền qua lại và ngắm nhìn thật kỹ. Rồi ông nhìn khắp xung quanh nhưng chẳng thấy ai. Lúc bấy giờ ông bỏ đồng tiền vào túi, và tiếp tục xỏ chân vào chiếc giày còn lại. Sự ngạc nhiên của ông dường như được nhân lên gấp bội, khi ông tìm thấy đồng tiền thứ hai bên trong chiếc giày. Với cảm xúc tràn ngập trong lòng, người nông dân quì xuống, ngước mặt lên trời và đọc to lời cảm tạ chân thành của mình. Ông bày tỏ sự cảm tạ đối với bàn tay vô hình nhưng hào phóng đã đem lại một mòn quà đúng lúc cứu giúp gia đình ông khỏi cảnh túng quẫn người vợ bệnh tật không ai chăm sóc và đàn con đang thiếu ăn.

Anh sinh viên lặng người đi vì xúc động, nước mắt giàn giụa. Vị giáo sư lên tiếng: "Bây giờ em có cảm thấy vui hơn lúc trước nếu như em đem ông ta ra làm trò đùa không?" Người thanh niên trả lời: "Giáo sư đã dạy cho em một bài học mà em sẽ không bao giờ quên. Đến bây giờ em mới hiểu được ý nghĩa thật sự của câu nói mà trước đây em không hiểu: "Cho đi là hạnh phúc hơn nhận về".


Read More »

Friday, August 5, 2016

MSSQL: Reduce log file of SQL Server

(Anhgolden's Blog) - Dung lượng file SQL DB ngày càng tăng, trong khi dữ liệu chỉ có vài GB, nhưng file Log thì hàng trăm GB (gấp nhiều lần file dữ liệu).
Giả sử DB là Dbname, sẽ có 2 file:
- File data: Dbname.mdf
- File log: Dbname_log.ldf

Nay muốn giảm dung lượng file log (Dbname_log.ldf), xin chia sẻ dùng Sql Script như sau:

===
USE Dbname;
GO

-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE Dbname
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (Dbname_Log, 1);
GO
-- Reset the database recovery model.
ALTER DATABASE Dbname
SET RECOVERY FULL;
GO
===

Kết quả sau khi thực hiện:
==
Diễn giải:

B1: SET RECOVERY SIMPLE
Có 3 chế độ Recovery trong SQL Server: FULL, SIMPLE và BULK LOGGED

Chế độ mặc định là FULL.

Khi ở chế độ này, bất kì một transaction nào, kể cả khi đã commit cũng đều được lưu trong LOG, do đó có thể dựa vào những transaction này để “quay lui (rollback)” DB về bất kì thời điểm nào. Vì thế với những DB có Transaction nhiều, DATA ít thì file LOG vẫn có thể rất lớn.

SET RECOVERY về SIMPLE: ở chế độ này, sau khi transaction được COMMIT sẽ tự động xóa. Do vậy File LOG của DB ở chế độ này thường rất nhỏ.

B2: DBCC SHRINKFILE (Dbname_Log, 1)

Dùng DBCC SHRINKFILE để SHRINK file log xuống còn 1 Mb
Nếu không set Recovery về SIMPLE thì sẽ ko thể xóa bỏ hết các transaction đã được COMMIT.
SHRINKFILE chỉ thu dọn và sắp xếp và phân bố lại dữ liệu, bỏ các vùng trống để giải phóng bộ nhớ, chứ không phải xóa dữ liệu. Vì thế ở chế độ FULL, SHRINKFILE hầu như ko tác dụng, hoặc nếu có thì file LOG dung lượng giảm đi ko đáng kể.

B3: Sau đó SET RECOVERY về lại FULL

(Source: Sưu tầm)
Read More »

Friday, July 1, 2016

Mssql: Cannot Restore DB because it is in use by this session

(Anhgolden's Blog) - Khi Backup mssql db thì OK, nhưng khi Restore thì hệ thống báo lỗi:

Restore failed for Server 'Server_Name'. (Microsoft.SqlServer.Smo)
System.Data.SqlClient.SqlError: RESTORE cannot process database 'DbName' because it is in use by this session. It is recommended that the master database be used when performing this operation.

Nguyên nhân là không thể Restore db khi login bằng User mà User đang set db default là db muốn Restore.

Do đó, cần thay đổi chỉ định db default cho User thực hiện.

B1: Security >> Logins >> Chọn User (đang login db) >> Right Click Properties.

B2: Change Default db.

Read More »

Thursday, May 12, 2016

Blog: Chèn 5 Stars Rating vào Blog

(Anhgolden's Blog) - Sưu tầm

Xin chia sẻ cách thực hiện chèn công cụ Rating vào Blog.

Sử dụng công cụ: http://www.graddit.com/ratings-widget

Bước 1: Mở Blog template - Edit HTML

Tìm
</head>
Chèn đoạn code sau ở phía trên:
<!-- Rating Start1 -->
<link href='http://static.graddit.com/css/graddit.css' rel='stylesheet' type='text/css'/>
<!-- Rating End1 -->


Tìm
    <div class='post-header'>
    <div class='post-header-line-1'/>

Chèn đoạn code sau ở bên dưới:
<!-- Rating Start2 -->

<b:if cond='data:blog.pageType != &quot;static_page&quot;'><div expr:id='&quot;labels_&quot; + data:post.id' style='display: none; visibility: hidden;'><b:if cond='data:post.labels'><b:loop values='data:post.labels' var='label'><data:label.name/>,</b:loop></b:if></div>Rate this posting: <div class='ffbs_rate' expr:id='data:post.id'>{[[&#39;&lt;img src=&quot;http://static.graddit.com/img/star.png&quot;/&gt;&#39;]]}</div><div class='ffbs_stats' expr:id='&quot;ffbs_stats_&quot; + data:post.id'/><script expr:src='&quot;http://www.graddit.com/rate/eng/5/&quot; + data:post.id + &quot;?id=&quot; + data:post.id + &quot;&amp;stats=ffbs_stats_&quot; + data:post.id + &quot;&amp;labels=labels_&quot; + data:post.id + &quot;&amp;info=info-&quot; + data:post.id + &quot;&amp;info_delay=2&amp;url=&quot; + data:post.url + &quot;&amp;class_star=ffbs_star_img&amp;class_star_set=ffbs_star_img_set&amp;class_star_vote=ffbs_star_img_vote&amp;views=yes&amp;votes=yes&amp;average=yes&quot;' type='text/javascript'/></b:if>

<!-- Rating End2 -->
Read More »

Wednesday, May 4, 2016

Access: The search key was not found in any record


(Anhgolden's Blog) - Khi import data từ Excel và Access, bị lỗi như sau:
"The search key was not found in any record". Lưu ý kiểm tra lại Header Row của file data Excel.

Thông thường có Cột trống (không tên) hoặc Tên Cột có ký tự trắng (trống) ở trước (prefix).
Read More »

Tuesday, April 19, 2016

SQL Server: Tổng hợp

(Anhgolden's Blog) - Tổng hợp

1. Primary Key Vs Unique:

- Primary Key (khóa chính) bản thân đã bao gồm tính Unique (dữ liệu duy nhất và không trống).
- 1 Table chỉ có 1 Primary Key, nhưng có thể có nhiều field Unique.

2. Primary Key Vs Index:

- Khi thiết lập Primary Key hay Index dữ liệu đã được sắp xếp (Sorting), giúp cho việc truy vấn dữ liệu được nhanh chóng.
- Tuy nhiên Primary Key sẽ check tính duy nhất Unique và 1 table chỉ có 1 Primary key, còn Index có thể thêm thuộc tính Unique (On/Off) và 1 table có thể có nhiều Index cho nhiều field.

3. Group by Vs Distinct:

- Group by và Distinct có cùng điểm chung là loại bỏ dòng dữ liệu trùng. Tuy nhiên, Group by được sử dụng khi có yếu tố tính gộp.

Ví dụ:

Example of DISTINCT:
SELECT DISTINCT Employee, Rank
FROM Employees

Example of GROUP BY:
SELECT Employee, Rank
FROM Employees
GROUP BY Employee, Rank

Example of GROUP BY with aggregate function:
SELECT Employee, Rank, COUNT(*) EmployeeCount
FROM Employees
GROUP BY Employee, Rank
4. Add/Drop/Modify Column:

ALTER TABLE table_name
ADD column_name datatype

ALTER TABLE table_name
DROP COLUMN column_name

ALTER TABLE table_name
ALTER COLUMN column_name datatype






Read More »