1

REMOTE FUNCTIONinSELECT節を呼び出す方法を探していVIEWます。基本的に私はこのようなことをしようとしています:

    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) );

そして、私が取得しようとしているのは、リモート サーバーの関数から評価される各プロジェクトの開始日が 7 番目の列に保持されるというビューです。

4

1 に答える 1

2

リモート関数の呼び出しについて私が知っている唯一の方法はopenquery. ただし、文字列リテラルのみを受け取るため、 inopenqueryへの呼び出しをラップする必要があります。openqueryexec

関数を作成し、「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.
于 2012-05-13T09:27:30.780 に答える