[ Simke @ 09.06.2004. 05:24 ] @
Dakle imam funkciju koja stalno izbacuje sledecu gresku kada pokusam da je kreiram na serveru:
Select statements included within a function cannot return data to a client.

Imam jos dve funckcije jako slicne ovoj (output ima 2 parametra umesto jednog, to je manje vise jedina razlika), koje rade bez problema.

Postavicu code ovde pa neko nek pogleda ako ima vremena. Hvala unapred.

Code:

CREATE FUNCTION dbo.CON_fncCnStatusChangedForCCode
    (
    @CCode varchar(50)
    )
RETURNS @Documents TABLE 
    (
        DocumentID int        
    )
AS
    BEGIN
    
        -- look for CNs for specified ccode that need status change reported

        -- Returns recordset of documentids.

        -- 20/11/02 DMW Created (from spcnstatuschanged)

        DECLARE @DocumentID int

        -- initialise variables

        SET @DocumentID = 0
        
        -- select data
        
        DECLARE CnStatusChangedForCCode_ReadCursor CURSOR FOR
        SELECT tblConsignment.consignmentid
        FROM tblConsignment
            INNER JOIN tblDocument ON tblConsignment.consignmentid = tblDocument.documentid
        WHERE tblConsignment.edi = -1
            AND tblDocument.ccode =  @CCode
        ORDER BY tblConsignment.consignmentid
        
        OPEN CnStatusChangedForCCode_ReadCursor
        FETCH NEXT FROM CnStatusChangedForCCode_ReadCursor
        INTO @DocumentID
        WHILE @@FETCH_STATUS <> -1
        BEGIN
        
            INSERT INTO @Documents
                (DocumentID)
            VALUES
                (@DocumentID)
        
            FETCH NEXT FROM CnStatusChangedForCCode_ReadCursor
            INTO @DocumentID        
        END
        
        CLOSE CnStatusChangedForCCode_ReadCursor
        DEALLOCATE CnStatusChangedForCCode_ReadCursor                
        
    RETURN
    
    END
[ sneki @ 09.06.2004. 14:37 ] @
ako te dobro razumem, ti hoces da vratis rezultat ovog upita:

SELECT tblConsignment.consignmentid
FROM tblConsignment
INNER JOIN tblDocument ON tblConsignment.consignmentid = tblDocument.documentid
WHERE tblConsignment.edi = -1
AND tblDocument.ccode = @CCode
ORDER BY tblConsignment.consignmentid

funkcija koju si ti napisao radi bez problema kod mene.
samo bih prokomentarisala da ti je ovaj kursor ovde nepotreban. ne samo da je nepotreban, vec bi ti pri velikom broju rekorda bio mnogo spor.
mislim da je dovoljno da napises jednu inline funkciju, naprimer nesto ovako:

CREATE FUNCTION CON_fncCnStatusChangedForCCode
(
@CCode varchar(50)
)
RETURNS table
AS
RETURN
(
SELECT tblConsignment.consignmentid
FROM tblConsignment
INNER JOIN tblDocument ON tblConsignment.consignmentid =
tblDocument.documentid
WHERE tblConsignment.edi = -1
AND tblDocument.ccode = @CCode
)
GO

i zatim:

select consignmentid
from CON_fncCnStatusChangedForCCode('a')
ORDER BY consignmentid

ako te nisam dobro razumela, odgovori pa cu pogledati malo bolje.
[ Simke @ 14.06.2004. 07:37 ] @
Problem resen, stvar je bila u tome da su se pojavili neki nestandardni karakteri koji se u query analyser-u i visual studiu nisu videli, nego sam ih video tek kada sam query iskopirao u notepad. Obrisao ih i radi bez problema.

Slazem se da bi moglo drugacije, ali ternutno prebacujemo ceo sistem sa Informix-a na SQL Server, tako da je sve "as-is". Kursor je koriscen u Informixu, tako da je i ovde. Optimizacija dolazi posle.

Hvala na odgovoru.