[ MarkoBalkan @ 13.07.2009. 17:56 ] @
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]
[ mmix @ 15.07.2009. 07:49 ] @
Okaci odgovor ovde, mozda ce jos nekom biti od koristi...
[ MarkoBalkan @ 15.07.2009. 16:51 ] @
u index treba staviti sve kolone koje su u "Group By".
[ HladankaoLed @ 27.07.2009. 15:58 ] @
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
[ MarkoBalkan @ 31.07.2009. 21:01 ] @
@HladankaoLed

dogodilo se slučajno