use function from another database in computed column(在计算列中使用另一个数据库中的函数)
问题描述
我在单个数据库中安装了一组自定义CLR函数。当我需要在另一个数据库的查询/视图/过程中使用这些函数时,我只需通过三部分名称[db].[schema].[function]()
引用它们,它就可以很好地工作。
但是由于错误4120
A user-defined function name cannot be prefixed with a database name in this context
,我不能在计算列中使用它们。
当然,使用两部分名称[schema].[function]()
在同一数据库上添加计算列没有问题。
有没有办法解决这个问题?也许我可以在引用"原始"函数的每个其他数据库中创建某种"快捷"函数?或者,我是否可以像left()
或substring()
那样,将这些函数安装在一个系统数据库中,使我能够仅使用其名称调用函数?
model
db中也是如此。但我希望有更优雅的方式来做到这一点。
推荐答案
没有比这更好的方法了。计算列不能依赖外部函数(即使您将其隐藏在synonym后面,这似乎是您想要的那种"快捷"函数)-问题是跨数据库关系不能破坏模式稳定性-当数据库脱机、SINGLE_USER或被删除时会发生什么?这类似于外键不能引用另一个数据库中的表,并且表不能属于另一个数据库中的架构的原因。
您已经知道不能使用由3部分组成的名称(在SQL Server 2014中,我收到不同的错误):
消息207,级别16,状态1
列名‘Other_database_name’无效。
如果尝试使用同义词屏蔽函数,则会收到:
消息2788,级别16,状态2
同义词在架构绑定对象或约束表达式中无效。
因此,请将您的函数部署到所有数据库,或者预计算值并手动插入和存储它们,而不是依赖于计算列。
这篇关于在计算列中使用另一个数据库中的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在计算列中使用另一个数据库中的函数
基础教程推荐
- Sql Server 字符串到日期的转换 2021-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01