none
關於SQL Server 2005連到Oracle的Select問題 RRS feed

  • 問題

  • 為什麼 OPENQUERY 這個不能傳變數進去?

    原本我想把條件式的查詢
    寫成SQL預存程序

    但是
    在SQL預存程序裡要組合Oracle用的Select時
    發現字串組好了
    但是變數卻無法在
    OPENQUERY中使用


    Code Snippet

    CREATE FUNCTION [dbo].[getUserName]
    (
        @strUserId as nvarchar(10)
    )
    RETURNS nvarchar(30)
    AS
    BEGIN

        -- Declare the return variable here
        DECLARE @ResultVar as nvarchar(30);


        DECLARE @strOracleSelect as varchar(1024);
        SET @strOracleSelect = 'SELECT UserName FROM UserDB.UserAccount WHERE EnableFlag=1 And UserId='''+@strUserID +''';';


    -- 會卡在這邊, 無法儲存SQL預存程序?
        SELECT    @ResultVar = UserName  FROM   OPENQUERY(MYORACLE,@strOracleSelect);



        -- Return the result of the function

        RETURN @ResultVar;


    END



    2008年8月18日 上午 09:30

所有回覆

  • You may need build dynamic sql for that.

    2008年8月18日 下午 06:36
  •  

    首先當然要確定linked server連結是正常的,我猜你這部份是ok的

    再來試著用openquery 寫死一段oracle select,即把@strOracleSelect 字串寫死,帶進openquery裡

    如果也是ok,那就表示從sql server查oracle 資料庫也是ok的

    最後,不知會不會是function不支援這種寫法

    如果把你要執行的語法,包成一個字串變數,例

     

     declare @A  nvarchar(100)

     select  @A='xxxxxxxx'

     EXEC sp_executesql @A 或  EXEC  (@A)

     

    這樣不知可不可以....

     

    2008年8月22日 上午 08:27
  • EXEC sp_executesql @A 或  EXEC  @A
    都不能用

    可以建立函數
    但執行時卻出來

    不允許在函數內使用遠端函數呼叫。
    2008年8月27日 上午 08:00