在计算列中使用另一个数据库中的函数 [英] use function from another database in computed column

本文介绍了在计算列中使用另一个数据库中的函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在单个数据库中安装了一组自定义CLR函数。当我需要在另一个数据库的查询/视图/过程中使用这些函数时,我只需通过三部分名称[db].[schema].[function]()引用它们,它就可以很好地工作。

但是由于错误4120A user-defined function name cannot be prefixed with a database name in this context,我不能在计算列中使用它们。

当然,使用两部分名称[schema].[function]()在同一数据库上添加计算列没有问题。

有没有办法解决这个问题?也许我可以在引用"原始"函数的每个其他数据库中创建某种"快捷"函数?或者,我是否可以像left()substring()那样,将这些函数安装在一个系统数据库中,使我能够仅使用其名称调用函数?

目前,我用来更新和安装新函数的脚本在我需要函数的每个数据库上执行相同的操作,在modeldb中也是如此。但我希望有更优雅的方式来做到这一点。

推荐答案

没有比这更好的方法了。计算列不能依赖外部函数(即使您将其隐藏在synonym后面,这似乎是您想要的那种"快捷"函数)-问题是跨数据库关系不能破坏模式稳定性-当数据库脱机、SINGLE_USER或被删除时会发生什么?这类似于外键不能引用另一个数据库中的表,并且表不能属于另一个数据库中的架构的原因。

您已经知道不能使用由3部分组成的名称(在SQL Server 2014中,我收到不同的错误):

消息207,级别16,状态1
列名‘Other_database_name’无效。

如果尝试使用同义词屏蔽函数,则会收到:

消息2788,级别16,状态2
同义词在架构绑定对象或约束表达式中无效。

因此,请将您的函数部署到所有数据库,或者预计算值并手动插入和存储它们,而不是依赖于计算列。

这篇关于在计算列中使用另一个数据库中的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆