Welcome to Sign in | Help
in Search

SQL OpenQuery si parametru vaqrchar

Last post 10-19-2007, 10:30 PM by B_gd_n[ ]Sahlean. 9 replies.
Sort Posts: Previous Next
  •  10-18-2007, 8:33 AM 2958

    SQL OpenQuery si parametru vaqrchar

    Salut.

    Am 2 servere SQL 2005 linked intre ele. Pe un server1 am o tabela, Table1 care are sa zicem coloanele Col1, Col2, Col3, una dintre ele fiind timestamp.


    Pe server2 am nevoie de informatii filtrate de pe server1, pentru asta vreau sa fac un table valued function la care sa ii trimit un parametru varchar.
    Deoarece in tabela am o coloana de tip timestamp, nu le pot aduce printr-un simplu select si trebuie sa folosesc OpenQuery.

    In acest caz, in functia mea ar trebui sa am:
    parametru @param varchar(10) pe care transmit valoarea 'D1'
    Selectul care returneaza ce ma interezeaza ar trebui sa fie asa:

    SELECT Col1, Col2
    FROM OPENQUERY(LinkedServer1, 'SELECT col1, col2
    FROM databasename.dbo.Table1
    WHERE col1=@param ') AS derivedtbl

    Asa nu functioneaza, problema e cum fac stringul din OPENQUERY sa puna in loc de @param sa puna 'D1' cu ghilimele cu tot ?
    Am incercat tot felul de cast-uri si replace-uri si tot nu am reusit. Poate solutia e simpla dar nu o vad de oboseala...

    Va multumesc anticipat.

  •  10-18-2007, 9:30 AM 2959 in reply to 2958

    Re: SQL OpenQuery si parametru vaqrchar

    Citez din Books Online (cautati "OPENQUERY function")

     

    "

    Remarks

    OPENQUERY does not accept variables for its arguments

    "


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  10-18-2007, 10:31 AM 2961 in reply to 2959

    Re: SQL OpenQuery si parametru vaqrchar

    daca definesti functia inline tabled valued asa

    create function functie(@param varchar(255)) execute as user1

    returns table as

    (

    SELECT Col1, Col2
    FROM 
    Linkedserver1.databasename.schematabela.Table1
    WHERE col1=@param ')

    - setezi baza de date in care e functia set trustworthy on

    - in babza de date la distanta creezi user1 -care bate pe acelasi login ca user1 din baza de date unde e procedura si da-i drepturile: authenticate si drept de select pe tabela,sau mai ai varinta sa semnezi functia cu un certificat e un plic mai complicat


     


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  10-18-2007, 2:21 PM 2967 in reply to 2961

    Re: SQL OpenQuery si parametru vaqrchar

    Multumesc pentru raspunsuri. Partea proasta e ca nu pot sa folosesc select simplu deoarece una dintre tabele fiind timestamp nu merge sa mi-a aduca da eroare: 

    Msg 7356, Level 16, State 1, Line 1
    The OLE DB provider "MSDASQL" for linked server "LinkedServer" supplied inconsistent metadata for a column. The column "timestamp" (compile-time ordinal 66) of object ...  was reported to have a "DBCOLUMNFLAGS_ISROWVER" of 0 at compile time and 512 at run time.


  •  10-18-2007, 2:44 PM 2969 in reply to 2967

    Re: SQL OpenQuery si parametru vaqrchar

    Pai nu folosi oledbprovider ci sqlnet native driver ala .Presupun ca aplicatia ta foloseste ado.net pt conexiune nu?

    adica fa o conexiune cu calsa SqlConnection nu oledb


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  10-18-2007, 3:42 PM 2971 in reply to 2969

    Re: SQL OpenQuery si parametru vaqrchar

    Am renuntat la ideea de openquery. Ma gandesc la ideea sa fac un view pe celalalt server cu exact ce am in select, iar de la mine sa fac exact cum ai zis mai sus Select * from linkedserver.dbo.view where conditie. Ma intreb daca acest where conditie se executa pe serverul linked SAU imi aduce mie toate datele din view si face where local pe serverul meu... Ce ziceti ?
  •  10-18-2007, 7:01 PM 2978 in reply to 2971

    Re: SQL OpenQuery si parametru vaqrchar

     e procesat selectul pe linked normal si apoi datele sunt aduse in view,daca faci un view cu query ala


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  10-19-2007, 12:32 AM 2982 in reply to 2978

    Re: SQL OpenQuery si parametru vaqrchar

    Ai putea incerca sa utilizezi o procedura stocata "remote".

    Exemplu:

    Vrei sa apelezi de pe SERVER1 o procedura stocata definita pe SERVER2.

    Pe SERVER2 creezi procedura stocata:

    CREATE PROCEDURE spTest
    @cod INT
    AS

    SELECT Q.C1, Q.C2
    FROM
    (
    SELECT 'A' AS C1, 101 AS C2
    UNION
    SELECT 'B', 102
    UNION
    SELECT 'C', 103
    UNION
    SELECT 'D', 104
    UNION
    SELECT 'E', 105
    ) AS Q
    WHERE Q.C2 >= @cod

     
    Pe SERVER1:

    EXEC sp_addlinkedserver  
        @server = 'LINK_SQLSERVER_2', --denumire linked server
        @srvproduct = '',
        @provider = 'SQLNCLI', --furnizorul de date
        @datasrc = 'server\instanta', --serverul (sau server\instanta) la care se va realiza conexiunea
        @catalog = 'bd_server_2' --baza de date


    --activezi optiunea RPC OUT pentru serverul "linked"

    EXEC master.dbo.sp_serveroption
        @server='LINK_SQLSERVER_2',
        @optname='rpc out', 
        @optvalue='true'


    --definesti contextul de conectare la SERVER2 de pe SERVER1
    --daca te conectezi pe SERVER2 cu acelasi utilizator ca si pe SERVER1 (ex. folosind autentificare Windows; se poate si  cu autentificare mixta WIN+SQL)
    EXEC sp_addlinkedsrvlogin

        @rmtsrvname = 'LINK_SQLSERVER_2',
        @useself = 'TRUE',
        @locallogin = 'domeniu\utilizator'

    --daca te conectezi pe SERVER2 cu alt utilizator decat cel de pe SERVER1
    EXEC sp_addlinkedsrvlogin
        @rmtsrvname = 'LINK_SQLSERVER_2',
        @useself = 'FALSE',
        @locallogin = 'domeniu\utilizator',
        @rmtuser = 'utilizator_server_2',
        @rmtpassword  = 'parola_utilizator_server_2'
     

    Executi procedura stocata:

    EXEC LINK_SQLSERVER_2.bd_server_2..spTest 104

  •  10-19-2007, 5:47 PM 2997 in reply to 2958

    Re: SQL OpenQuery si parametru vaqrchar

    Problema cu "inconsistent metadata" pentru coloana timestamp apare din cauză că foloseşti provider-ul MSDASQL ("Microsoft OLE DB Provider for ODBC Drivers"). Dacă foloseşti provider-ul SQLOLEDB ("Microsoft OLE DB Provider for SQL Server") sau provider-ul SQLNCLI ("SQL Native Client"), merge fără probleme.

    Răzvan 

  •  10-19-2007, 10:30 PM 2999 in reply to 2997

    Re: SQL OpenQuery si parametru vaqrchar


View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems