otrdiena, 2010. gada 14. septembris

Atkarībā no programmas dažādi vaicājuma rezultāti

Piemēram- ir datu bāze, kurā strādā ar vairākām programmām. Programmas ielasa datus no skatiem. Skatos ir pielikta "where" daļa.
Nepieciešamas izmaiņas- viena no programmām, kas lasīja datus no šiem skatiem ir jāmaina tā, lai tiktu ielasīti pilnīgi visi dati. Tajā pašā laikā saglabājot to, ka pārējās programmās tiek ielasīti dati tieši tāpat, kā to darīja iepriekš.
Ko darīt?
Izveidojam funkciju, kas atgriež vērtību 1, ja jārāda visi dati, 0, ja jārāda tikai pēdējā gada dati- atkarībā no programmas, ar ko lietotājs strādā. Šo funkciju izmantot skatos. Tādā veidā panākot minimālu izmaiņu nepieciešamību programmā.
Funkcija izskatītos apmēram šādi:
Create FUNCTION [dbo].[fn_JaunaProgramma] ()
RETURNS [bit]
AS BEGIN
IF EXISTS (SELECT program_name FROM master.dbo.sysprocesses
    WHERE spid = @@spid AND program_name = 'Nosaukums')
       RETURN 1;
RETURN 0;
END
„Nosaukums” ir programmas nosaukums, ar kuru lietotājam jāslēdzās klāt lai atgrieztu vērtību ‘1’. (Kā uzstādīt programmas nosaukumu)
Savukārt pats vaicājums skatā varētu izskatīties šādi (zvaigznīte konkrētu kolonnu uzskaitījuma vietā netiek rekomendēta):
Select *
From dbo.Tabula
Where dbo.fn_JaunaProgramma() = 1 OR gads > 2008
BET! Kods ir ļoti grūti testējams (kāds saka, ka neatlasa datus, bet programmētājs pieslēdzas ar Management Studio un viss tiek rādīts, jo ir cits programmas nosaukums)! Var rasties daudz mulsinošu problēmu, par kurām neviens nekad neiedomāsies. Šis bija veiksmīgs pagaidu risinājums (daļa programmu strādāja vienā veidā, otra daļa- pavisam citā) pārejas periodam. Pēc tam funkcija vienkārši atgrieza vienu vērtību- „1”. Kā galīgo risinājumu šādu nerekomnedētu.

Nav komentāru:

Ierakstīt komentāru