trešdiena, 2010. gada 15. septembris

Aprēķinātās kolonnas

Dažkārt ir labi izmantot kolonnas, kuru vērtības tiek aprēķinātas dinamiski, vaicājumam griežoties pie kādas konkrētas kolonnas- tās sauc par aprēķinātajām kolonnām (computed column).

Aprēķinātās kolonas vērtība parasti tiek iegūta tikai tad, kad attiecīgā kolonna tiek izmantota vaicājumā (izņēmums var būt, ja izveido indeksu uz šīs kolonnas, bet to šeit neapskatīšu). Atkārtota aprēķināšana palielina slodzi serverim. Tāpēc der apsvērt patstāvīgās (persisted) aprēķinātās kolonnas (šādas parādījās SQL Server 2005). Atšķirībā no parastām aprēķinātām kolonām, pastāvīgās aprēķinātās kolonas vērtība tiek aprēķināta tikai tad, ja notiek rindas ievietošana/mainīšana. Tālāk tiek izmantota jau aprēķinātā vērtība.

Aprēķinātās kolonnas izdevīgi izmantot arī vaicājumu vienkāršošanai- nevis miljons vietās rakstīt kādu vairāk vai mazāk sarežģītu izteiksmi.

Ilustrācijai („Numurs” ir parasta aprēķinātā kolonna, „NumursP” ir patstāvīga aprēķinātā kolonna. LigumaNr ir kombinēts no burtiem un cipariem. Aprēķinātās kolonnas pārvērš pēdējās trīs zīmes par skaitli):
create table dbo.PiemeraTab
(
AtslegaID int identity(1,1) primary key,
LigumaNr nvarchar(12),
Numurs As Cast(Right(LigumaNr,3) as int),
NumursP As Cast(Right(LigumaNr,3) as int) Persisted
)
Go
insert into dbo.PiemeraTab (LigumaNr) values ('LVSQLBLOG001')
insert into dbo.PiemeraTab (LigumaNr) values ('LVSQLBLOG002')
insert into dbo.PiemeraTab (LigumaNr) values ('LVSQLBLOG003')
Aprēķinātās kolonnas Management studio izskatās šādi („Numurs” un „NumursP”- atšķirt vai ir vai nav persisted gan šeit nevar):

Pastāvīgās aprēķinātas kolonas:
* nevar mainīt uz parastām aprēķināmajām kolonnām un otrādi. Lai to izdarītu, no sākuma vajadzīgā kolona jādzēš un tā vietā jāieliek otra veida aprēķinātā kolonna.
* vari izmantot tikai tad, ja aprēķins ir ar determinētu rezultātu (par determinētām/ne-determinētiem rezultātiem var palasīt- Determinētu funkciju izmantošana)

Nav komentāru:

Komentāra publicēšana