• 4 odgovora
  • 3.691 pregleda
materialized views ko ms sql servera 13.07.2009. u 17:56 · pre 210 meseci #1
pitanje je postavljeno i na oracle temi za oracle bazu, ali ovdje imam drugo pitanje.

Code:
create VIEW racuni1
WITH SCHEMABINDING
AS SELECT     dbo.proizvodi.ID, dbo.proizvodi.ime, dbo.proizvodi.cijena, SUM(dbo.racuni.kolicina) AS Expr1, 
                         SUM(dbo.racuni.kolicina * dbo.proizvodi.cijena) AS Expr2
FROM         dbo.racuni INNER JOIN
                    dbo.proizvodi ON dbo.racuni.ID_proizvodi = dbo.proizvodi.ID
group by dbo.proizvodi.ID, dbo.proizvodi.ime, dbo.proizvodi.cijena
GO



kad probam ovo izvršiti

Code:
create UNIQUE CLUSTERED INDEX ix_bbb ON racuni1(ID)
GO


dobijem grešku

Cannot create index on view 'marko.dbo.racuni1' because its select list does not include a proper use of COUNT_BIG. Consider adding COUNT_BIG(*) to select list.

u čemu griješim?


našao sam odgovor , molim moderatora da obriše temu



[Ovu poruku je menjao mmix dana 15.07.2009. u 08:50 GMT+1]
Re: materialized views ko ms sql servera 15.07.2009. u 07:49 · pre 210 meseci #2
Okaci odgovor ovde, mozda ce jos nekom biti od koristi...
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: materialized views ko ms sql servera 27.07.2009. u 15:58 · pre 209 meseci #4
Bez imalo zelje za polmikom sa korisnikom koji je zapoceo temu, zbog ostalih korisnika moram da napomenem da ovo jednostavno nije tacno.

Prilikom pokusaja kreiranja indeksa dobijena je sledeca poruka:

Citat:
Cannot create index on view 'marko.dbo.racuni1' because its select list does not include a proper use of COUNT_BIG. Consider adding COUNT_BIG(*) to select list.



S obzirom da je problem, prema korisniku koji je zapoceo temu, resen time sto su sve kolone iz GROUP BY dodate u indeks ispada da je SQL Server iz samo njemu znanih razloga izbacio poruku o gresci koja nema veze sa problemom. Desava se da su poruke o greskama nedovoljno precizne, katkad suvise genericke, pa cak i pogresne, ali je u najmanju ruku neozbiljno ignorisati ih.

Jedno od mnogobrojnih ogranicenja prilikom kreiranja indexed viewa kaze da je u slucaju da se koriste agregatne funkcije obavezna upotreba funkcije COUNT_BIG(*). Ogranicenej je sasvim na liniji greske koja je dobijena. Posto ista nije korigovana, naravno da index ni u drugom slucaju nije mogao da bude kreiran. Stoga bih zamolio korisnika MarkoBalkan da svojim odgovorom ne dovodi u zabludu druge korisnike.

U ovom pogledu je znaci neophodno dodati jos jednu stavku u SELECT iskazu (COUNT_BIG(*) naprimer), a ukoliko su u kolonama nad kojima se sumira dozvoljene NULL vrednosti onda je neophodno pozvati ISNULL funkciju:

Code:
SUM(ISNULL(dbo.racuni.kolicina,0))


inace ce nas SQL Server obradovati novom porukom '...SUM aggregate of nullable expression..' ili slicno tome.

Tek onda, i to ukoliko su i ostali preduslovi ispunjeni (kompletna lista na [url=http://technet.microsoft.com/en-us/library/ms191432.aspx][/url]) moze da se indeksira pogled. Pogled moze da se napravi naravno, ali ne moze da se indeksira ukoliko sve pobrojano nije ispunjeno. Kreiranje indexed views-a moze da bude velika blagodet za aplikaciju ukoliko se eskivira tuce raznih ogranicenja.

Nezavnisno od indeksiranih pogleda pokusaj kreiranja unique indeksa na koloni za koju korisnik u GROUP BY delu pretpostavlja da nije unique logicki je pogresan.

Pozdrav,
HKL
Potpis
Sad šta je tu je. A možda će da dođe i ova tvoja tetka iz Bosanske Krupe.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme