சில நேரங்களில், எஸ்க்யூஎல் சர்வரிலிருந்து தகவலை எடுக்கும்பொழுது, தொடர்ச்சியான ஒரு எண்ணும் வரவழைக்கவேண்டிய தேவை இருக்கலாம். உதாரணமாக, கீழ்க்கண்டவாறு ஒரு ஒரு வினவல் இருப்பதாக வைத்துக்கொள்வோம்:
select * from table1
அதன் விடை இப்படி இருப்பதாக இருக்கிறது என்று வைத்துக்கொள்வோம்:
| col1 |
col2 |
col3 |
| inv1 |
2000 |
cust1 |
| inv3 |
300 |
cust1 |
| inv4 |
10 |
cust1 |
| inv2 |
294 |
cust1 |
இதனோடு இன்னொரு காலம் சேர்த்து, கீழ்க்கண்டவாறான விடை நமக்குத் தேவை என்றும் வைத்துக்கொள்வோம்:
| S.No |
col1 |
col2 |
col3 |
| 1 |
inv1 |
2000 |
cust1 |
| 2 |
inv2 |
294 |
cust1 |
| 3 |
inv3 |
300 |
cust1 |
| 4 |
inv4 |
10 |
cust1 |
இதனை, எஸ்க்யூஎல் சர்வர் 2000ல், கீழ்க்கண்ட ஒரு வழிமுறையில் முயற்சிக்கலாம்:
1) எல்லா ரெக்கார்டுகளையும் ஒரு தற்காலிக டேபிளில் சேமிக்கவேண்டும்
2) அந்த தற்காலிக டேபிளில் வரிசை எண்ணிற்கான ஒரு காலத்தை சேர்த்துக்கொள்ளவேண்டும்
3) இந்த வரிசை எண்ணிற்கான காலத்தை update வினவலைக் கொண்டு வரிசையான எண்களை நிரப்ப வேண்டும்
4) பிறகு இந்த தற்காலிக டேபிளில் உள்ள வரிசைகளை வினவிய மென்பொருளுக்கு அனுப்பவேண்டும்.
ஆனால், இது மிகுந்த நேரத்தையும், நினைவகத்தையும் விழுங்கும் ஒரு செயலாகும். தகவலை டேபிளிலிருந்து எடுப்பதுடன் இவையெல்லாம் கூடுதல் வேலைகளாகும்.
அதிர்ஷ்டவசமாக, எஸ்க்யூஎல் சர்வர் 2005ல், உள்ளமைந்த ஒரு ஃபங்க்ஷனே இந்த காரியத்தை நமக்குச் சுலபமாக செய்து தரும். அதன் பெயர் row_number().
மேற்கண்ட வினவலை நாம் மாற்றியமைக்க வேண்டுமானால், இவ்வாறு வினவலாம்:
select row_number()
over(
order by col1)
as [S.No], *
from table1
இப்படி எழுதினால், தற்காலிக/நிகழ்நிலை டேபிள்கள், அப்டேட் வினவல் எதுவும் தேவையில்லை. எனினும், மிகப்பெரிய தகவல்தளங்களில், order by மிகுந்த நேரம்பிடிக்கும். அப்படிப்பட்ட சூழ்நிலையில், Common Table Expressionsஐப் பயன்படுத்தலாம். CTE அல்லது
Common Table Expressions என்பதும் ஒரு வகையில் தற்காலிக டேபிள், derived table போன்றதுதான். view என்றும் சொல்லலாம்.
with result
as
(
select *
from table1
)
select row_number()
over(
order by col1)
as [S.No], *
from result
இந்த வினவல் தகவல் தளத்திலிருந்து முதலில் எல்லா தகவலையும் எடுத்துக்கொள்கிறது. பிறகு வரிசைப்படுத்தி, வரிசை எண்களை வினவிய மென்பொருளுக்கு அனுப்புகிறது. எந்தவித அப்டேட், தற்காலிக டேபிளின் தேவை இல்லாமலே இதை SQL Server 2005ல் செய்யமுடியும்