[ igrgic13 @ 17.03.2011. 08:36 ] @
Dragi kolege trebam pomoć.
Naime imam potrebu koristi cursor za jedan problem koji prebrojava rekorde te koji bi to sve trebao zapisat u novu varijablu @tablica...ali nikako mi ne uspijeva.
kako izgleda code:

ALTER function [dbo].[test4]()
returns @TESTNA_TABLICA table
(
ime nvarchar(255),
prezime nvarchar(255),
ustrojId nvarchar(50)
)

as
begin
--INSERT INTO @TESTNA_TABLICA
declare osoblje_cursor cursor -- deklariram kursor
read_only
for SELECT
ime,
prezime,
ustrojId
FROM dbo.osoblje

declare --upisujem vrijednosti iz krusora
@ime nvarchar(255),
@prezime nvarchar(255),
@ustrojId nvarchar(50)

open osoblje_cursor

WHILE @@FETCH_STATUS = 0

BEGIN

fetch osoblje_cursor
insert into @TESTNA_TABLICA (ime, prezime, ustrojId)values (
@ime,
@prezime,
@ustrojid )
--PRINT @ime + ' ' + @prezime + ' ' + @ustrojid
return
END
close osoblje_cursor
DEALLOCATE osoblje_cursor
return
end

greska koju mi javlja:
Msg 444, Level 16, State 2, Procedure test4, Line 34
Select statements included within a function cannot return data to a client.

problem je u tome ako promijenim ovaj dio
fetch osoblje_cursor
insert into @TESTNA_TABLICA (ime, prezime, ustrojId)values (
@ime,
@prezime,
@ustrojid )
u fetch osoblje_cursor into
@ime,
@prezime,
@ustrojid
tada ne dobim gresku ali kad startam funkciju dobim praznu tablicu...HELP!!
[ Dusan Kondic @ 17.03.2011. 09:18 ] @
Probaj prvo da upišeš podatke u promenljive
pa onda da uneseš te podatke u tabelu

fetch osoblje_cursor into
@ime,
@prezime,
@ustrojid

insert into @TESTNA_TABLICA (ime, prezime, ustrojId)values (
@ime,
@prezime,
@ustrojid )

Lično ne volim kursore jer su "skupi".
Ne razumem problem, ali verujem da može da se reši i bez kursora.
Pozdrav
[ igrgic13 @ 17.03.2011. 09:24 ] @
hvala puno...evo uspio sam dobit zeljeni rezultat

open osoblje_cursor
WHILE @@FETCH_STATUS = 0
BEGIN
insert into @TESTNA_TABLICA
SELECT
ime,
prezime,
ustrojId
FROM dbo.osoblje
fetch osoblje_cursor into
@ime,
@prezime,
@ustrojid
[ Fedya @ 17.03.2011. 09:34 ] @
A zasto ne moze:

INSERT INTO @TESTNA_TABLICA (ime, prezime, ustrojId) SELECT ime, prezime, ustrojId FROM dbo.osoblje

??

Ako treba da prebrojis zapise lakse ces uraditi sa SELECT @tablica = COUNT(nesto) FROM nestoDrugo...

Mislim da ti ne treba kursor za ovo, i ako ikako mozes da izbegnes upotrebu kursora (a mozes u 90% slucajeva) do it