Welcome to Sign in | Help

Re: Merge replication, join filter pe relatii m:n

  •  07-11-2008, 2:47 PM

    Re: Merge replication, join filter pe relatii m:n

    Cryogenic1981:
    Pai trebuie sa filtrez tabela CompanyRelations in functie de tabela Company care e filtrata dinamic, adica nu pot pune conditii de genul IN (1,2) pentru ca aste e filtrare statica.

    Aici s-ar putea folosi o table valued function care sa intoarca o lista de ID-uri de Company, insa e o problema daca fac asa, adica la prima sincronizare totul merge ok, dar cand se shimba filtrul pe tabela Company (nu se sqhimba query-ul ci se doar se filtreaza diferit in functie de context), tabela CompanyRelations nu se mai filtreaza, ramane cu acelasi filtru.


    Încearcă să indici faptul că funcţia respectivă este nondeterministă inserând în codul sursă al acesteia, apelul unei functii nondeterministe sistem cum ar fi GETDATE().

    Dacă foloseşti acea funcţie care returnează o tabelă, încearcă să modifici tipul joncţiunii în CROSS/OUTER APPLY:
    CREATE FUNCTION FunctiaPestelui(@p TINYINT)
    RETURNS TABLE
      RETURN ( SELECT POWER(10,@p) AS ID )
    GO

    SELECT *
    INTO TabelaPestelui
    FROM
      (
      SELECT 10 AS ID,'B' AS Nume,1 AS Nr
      UNION
      SELECT 100,    'C',    2
      UNION
      SELECT 3333,  'D',    3
      UNION
      SELECT 10000,  'E',    4
      UNION
      SELECT 555555,  'F',    5
      ) AS Sursa

    --OK
    SELECT *
    FROM TabelaPestelui AS TP
      CROSS APPLY dbo.FunctiaPestelui(TP.Nr) AS T2
    WHERE TP.ID = T2.ID

    --Eroare
    SELECT *
    FROM TabelaPestelui AS TP
      INNER JOIN dbo.FunctiaPestelui(TP.Nr) AS T2
    ON TP.ID = T2.ID

View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems