我在服务器中有一个功能,链接到我当前的服务器。此功能也存在于本地服务器中,但是,为了维护精确的副本,我们必须在两个位置部署任何更改(不理想)。
是否可以: 1.跨链接服务器或执行功能 2.执行动态sql查询,以便下面的函数可以正确执行?
Create Function [dbo].[Build_HH_Key] (@lastname varchar(60),@address varchar(150), @zip varchar(10))
returns varchar(30)
as
Begin
Declare @out_var as varchar(30)
Declare @innerSQL as varchar(1000) = 'select out_var = [MyDatabase].[dbo].[Build_HH_Key]('+@lastname+','+@address+','+@zip+')'
Declare @sql as varchar(1000) = 'select @out_var = out_var from openquery([MyServer],'' '+ @innersql +' '' )'
Declare @Return as varchar(30)
exec sp_executesql @sql, N'@out_var varchar(30) OUTPUT', @Return = @out_var output;
Return @Return;
End
答案 0 :(得分:0)
在存在该函数的本地服务器上,您可以创建一个视图来存储函数定义,如下所示:
创建视图myFunctionDefinition 如
SELECT sm.object_id,
OBJECT_NAME(sm.object_id) AS object_name,
sm.definition
FROM Server.Database.sys.sql_modules AS sm
WHERE sm.object_id = OBJECT_ID('dbo.ufn_myTestFN')
当然,您可以拉入所有功能并限制下一部分所需的功能。
然后,您可以在链接服务器上创建一个作业,该作业将引入该函数的定义(代码),并使用视图中的内容更改其数据库上的当前版本。
declare @fn varchar max
set @fn = select definition from Server.Database.dbo.myFunctionDefinition
set @fn = replace(@fn,'create','alter')
sp_execute @fn