2012-05-13 16 views
1

REMOTE FUNCTIONSELECT句をVIEWに呼び出す方法を探しています。 は基本的にI'amはこのように気にいらをやろうとしている。View - SQL Serverからリモート関数を呼び出す

CREATE VIEW [dbo].[View_Year_Forcast] AS 
     (SELECT BshForecast.ProjectId, 
        BshForecast.JobTypeId, 
        Job_Type.NAME,   
        ProjectName , 
        ProjectManagerID,      
        ProjectManagerName , 


***EXEC @START_DATE =[192.168.0.10].[LudanProjectManager].[dbo].[func_Project_Get_Start_Date] @PROJECT_ID as [Start_Date],*** 

        StartBudget , 
        AdditionalBudget , 
        TotalBudget , 
        UsedBudget , 
     FROM  BshForecast INNER JOIN Job_Type ON BshForecast.JobTypeId = ID     
     WHERE (dbo.BshForecast.Year = DATEPART(YYYY,GETDATE())) 
       AND (dbo.BshForecast.IsDeleted = 0) 
       AND (dbo.BshForecast.BranchId = 200) 
       AND (dbo.BshForecast.Approved = 1)); 

そして、何I'am取得しようとすると、seven'th列から評価される各プロジェクトの開始日を開催するとの見方でありますリモートサーバの機能

答えて

2

リモート機能を呼び出す方法がわかっている唯一の方法はopenqueryです。しかし、openqueryは文字列リテラルを取るだけなので、にopenqueryへの呼び出しをラップする必要があります。

ここでは、関数を作成し、それを "localhost"というリンクサーバー経由で呼び出す例を示します。

use TestDatabase 
if exists (select * from sys.objects where name = 'fn_twice') 
    drop function fn_twice 
go 
create function dbo.fn_twice(@i int) returns int as begin return 2*@i end 
go 
declare @i int 
set @i = 21 

declare @func_sql nvarchar(max) 
set @func_sql = 'select @result = a.result from openquery(localhost, ' + 
     '''select TestDatabase.dbo.fn_twice(' + 
     cast(@i as varchar(12)) + ') as result'') a' 

declare @result int 
exec sp_executesql @func_sql, N'@result int output', @result output 

-- The result of the function call is now available in @result, and 
-- you can use it in a query. 
+1

私が間違っている場合は私を修正してください、しかし、それは 'OPENQUERY'である必要はありません。 'EXEC remoteserver.database..sp_executesql N'SELECT @result = dbo.FunctionName(arguments) '、N' @ result int output '、@myresult output'のように関数を呼び出すこともできます。しかし、私は何かが欠けているかもしれない。 –

+0

@AndriyM: 'sp_executesql'のRPCと実行権限が許可されていれば、あなたの方がはるかに洗練された解決策になります – Andomar

+0

あなたのことは非常に良い点です。とにかくあなたの提案を投票するつもりだったのを忘れてしまった。リモートファンクションを呼び出す必要があるときに、そのように 'OPENQUERY'を使うことに慣れなければならなかったことを覚えているからです。 –

関連する問題