Paging in SQL Server 2000

15 Jul

Oh man, working with M$ is hell. Yeah, they do very big things but they just forgot small but essential things.

M$ maybe the most stupid when not implementing paging functionality in T-SQL. Most of other DBMSs do that. Paging from server is a vital point, especially in web development. If you just do paging from client-side, you are wasting most of network traffics for unused records.

After searching thouroughly on Internet, I finally found out some ways to get arround this flaw. One uses dynamic SQL query to refine the query and add some ORDER BY + TOP clauses to get the result. Another way is to use a temporary table with an identity column used as a row number. I prefer the 2nd way. At least, it’s more secured.

alter procedure GetAuthors
(
@orderby 	nvarchar(100),
@recordsPerPage int,
@pageNumber 	int
)
AS
--  the amount of rows actually needed
declare @rowsNeeded int
--  the position where we need to start retrieving records
declare @startRecord int
-- initialize @rowsNeeded
set @rowsNeeded = (@pageNumber * @recordsPerPage)
-- initalize @startRecord
set @startRecord = ((@pageNumber-1) * @recordsPerPage) + 1

create table #temptable
(
 row		 int identity(1,1),
 au_id 		 varchar(20),
 au_lname	 varchar(40),
 au_fname	 varchar(20),
 phone	 	 char(12),
 address 	 varchar(40),
 city		 varchar(20),
 state	  	 char(2),
 zip		 char(5),
 contract	 bit
) 

-- set the rowcount to only the rows we need.
set rowcount @rowsNeeded

-- select data into a temp table,  I choose to
-- select all data, not just the key into the
-- temp table to avoid another join if the table is large.
insert into #temptable
(au_id,au_lname,au_fname,phone,address,city,state,zip,contract)
select au_id,
       au_lname,
       au_fname,
       phone,
       address,
       city,
       state,
       zip,
       contract
FROM authors
ORDER BY
CASE
WHEN @orderby=’au_lname’ THEN au_lname
WHEN @orderby=’au_fname’ THEN au_fname
WHEN @orderby=’au_id’    THEN au_id
END 
ASC
select row,
       au_id,
       au_lname,
       au_fname,
       phone,
       address,
       city,
       state,
       zip,
       contract
from #temptable
where row >=@startRecord

drop table #temptable

If you use SQL Server 2005, the life must be easier. You can use ROW_NUMBER to do paging:

WITH OrderedOrders AS
(select SalesOrderID, OrderDate,
Row_Number() OVER (order by OrderDate)as RN
from SalesOrderHeader )
SELECT * from OrderedOrders WHERE RN between 50 and 60

Well… At least, M$ have done something to improve the situation, but not all. It takes me all night to find out the way. I have even thought about switching to MySQL with a very simplier paging syntax, but this is my thesis :P, so I can’t.Thanks to the communities.

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=31741

Okey, time to continue my work.

Advertisements

Giới thiệu về Del.icio.us

12 Jul

Giới thiệu trang web Del.icio.us

Nghe qua tên website này bạn có thể liên tưởng đến một website nào đó của người Ý hay Bồ Đào Nha trên đất Mỹ. Thực ra nó là một cách đặt tên phỏng theo chữ “delicious” có nghĩa là “thơm ngon” trong tiếng Anh.

Hãy tưởng tượng xem, hằng ngày lướt web có bao nhiêu link hay mà bạn sưu tập được, bạn muốn lưu chúng lại. Bạn lưu tất cả trong một file text hay word, hoặc khá hơn là bạn tạo nhiều file để lưu, mỗi file là một chủ đề. Mỗi khi đi đâu bạn đều phải chép theo tất cả các file này để có thể lấy ra tham khảo hoặc thêm vào những liên kết mới. Có ai đó hỏi bạn có link ebook nào hay, bạn phải giở file ra kiếm. Thật phiền phức.

Delicious sẽ giúp bạn bạn đánh dấu (bookmark) lại những trang web mà bạn muốn giữ lại để tham khảo lại sau này. Bạn có thể lập một bộ sưu tập các website hay về nhiều lĩnh vực, dùng để share hoặc cho cá nhân,…

Cái hay của việc sử dụng delicious là bạn có thể tổ chức sắp xếp tùy theo ý thích, không phải kè kè chép trong USB và có thể tham khảo ở bất cứ nơi nào miễn có Internet (tất nhiên, nếu không có Internet thì bạn cũng đâu cần những liên kết đó làm gì).

Ngoài ra bạn cũng có thể dễ dàng chia sẽ bộ sưu tập của bạn bởi vì del.icio.us sinh ra là để chia sẻ kia mà . Nếu có ai đó hỏi bạn có liên kết nào hay, bạn chỉ cần chỉ người đó lên xem kho bookmark của bạn trên Delicious. Xem tiếp

Công cụ hỗ trợ cho Delicious

12 Jul

(Xem bài viết giới thiệu Delicious)

Cài các công cụ hỗ trợ cho Delicious

Ngay sau khi đăng ký, Delicious sẽ giới thiệu với bạn một số công cụ mà bạn sẽ sử dụng để việc sử dụng Delicious trở nên dễ dàng hơn.

Trước tiên, bạn hãy kéo-thả 2 liên kết mà Delicious cung cấp lên thanh công cụ Bookmarks (Firefox) hoặc Links (IE). Bạn cũng có thể kéo vào Favorites.

Liên kết post to delicious: Bạn đang xem một website đáng để lưu lại, không muốn phải mất công mở một trang Delicious lên để thêm một cách thủ công, bạn chỉ cần nhấp vào nút này.

Liên kết my delicious: đơn giản như cái tên của nó, nó sẽ đưa bạn đến kho link của chính bạn.


(click to enlarge)

Ghi chú: nếu bạn sử dụng IE mà không thấy Links Toolbar, bạn hãy nhấp chuột phải vào thanh công cụ bất kỳ và check vào dòng Links. Nếu dòng đó đã check thì có nghĩa là thanh công cụ đã nằm đâu đó trên màn hình và thường là bị thanh Address chèn ép dồn sang góc phải. Hãy vào đó lôi nó ra, cho nó thêm chút không gian hay tốt hơn là dành hẵn 1 dòng cho nó.

Nếu bạn bỏ lỡ qua trang giới thiệu này, bạn có thể quay lại bất kỳ lúc nào bằng cách vào Help >> Buttons trên website Delicious.

Nếu bạn là người dùng Firefox, bạn có thêm một lựa chọn, đó là cài thêm Delicious extension hỗ trợ 2 chức năng như trên đồng thời cũng cho bạn tìm kiếm trực tiếp từ Firefox mà không cần mở website Delicious lên.

Để cài đặt bạn có thể vào Help >> Firefox extension.

Quá trình phát triển của một lập trình viên

28 Jun

Hay cho ai nghĩ ra câu chuyện này 😀 . Thế mới đúng là lập trình viên. Thích nhất là giai đoạn Master Programmer và đoạn chót 😉 .
Link: The Evolution of a Programmer

What is a framework?

25 Jun

Today I found an interesting article about design and strategy in programming. It provides a quite basic understanding about how to write a good application.

 http://www.codeproject.com/gen/design/WhatIsAFramework.asp

Those are quotes from the authors of Design Patterns that the author like, and I do so:

"When you use a toolkit, you write the main body of the application and call the code you want to reuse.  When you use a framework, you reuse the main body and write the code it calls."

"Not only can you build applications faster as a result, but the applications have similar structures.  They are easier to maintain, and they seem more consistent o their users.  On the other hand, you lose some creative freedom, since many design decisions have been made for you."

"If applications are hard to design, and toolkits are harder, then frameworks are hardest of all.  …Any substantive change to the framework's design would reduce its benefits considerably, since the framework's main contribution to an application is the architecture it defines.  Therefore it's imperative to design the framework to be as flexible and extensible as possible."

Lỗi khó hiểu: DOCTYPE và Firefox “đá nhau”

24 Jun

Vừa phát hiện ra một lỗi ngớ ngẩn: <!DOCTYPE> và Firefox 1.5.0.4 "đá nhau". Chính xác hơn là DOCTYPE cho XHTML 1.0 Strict.

Ví dụ, khi chèn dòng sau đây vào đầu file html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;

Mở bằng IE thì không có vấn đề gì. Nhưng khi mở bằng Firefox thì tất cả các tag IMG đều tự động mang hiệu ứng giống như có style margin-bottom, bị hở một khoảng khá lớn phía dưới khi nằm trong một block. Khi đó, hầu như mọi layout có dùng đến IMG đặt trong một TD hay DIV đều bị thay đổi. Tôi đã thử đặt lại margin và cả padding = 0 mà vẫn không khắc phục được.

Lưu ý, lỗi trên không xảy ra nếu dùng DOCTYPE là XHTML 1.0 Transitional.

Cách khắc phục:

Sau khi quần cái HTML một lúc, tưởng như ngoài cách bỏ DOCTYPE hoặc đổi sang Transitional ra không còn cách nào khác thì lục được cái link này:

http://www.mozilla.org/docs/web-developer/faq.html#gaps

Giải thích chi tiết hơn ở đây.
Cách 1: Chuyển IMG thành block:

img {display: block;}

Cách 2:Đặt lại vertical-align

img {vertical-align: bottom;}

How IT Projects Really Work

20 Jun

http://www.scaryideas.com/Cartoons/ITProjects/project_1.html

Exactly what they say, IT projects are really crisis.