gpt4 book ai didi

sql-server - 在计算列中使用另一个数据库中的函数

转载 作者:行者123 更新时间:2023-12-03 03:01:17 24 4
gpt4 key购买 nike

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

但由于错误4120,我无法在计算列中使用它们在此上下文中,用户定义的函数名称不能使用数据库名称作为前缀

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

有什么想法可以解决这个问题吗?也许我可以在每个其他数据库中创建某种引用“原始”函数的“快捷方式”函数?或者我可以将这些函数安装在一个系统数据库中,这样我就可以仅使用函数的名称来调用函数,就像 left()substring() 一样?

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

最佳答案

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

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

Msg 207, Level 16, State 1
Invalid column name 'other_database_name'.

如果你尝试用同义词掩盖你的函数,你会得到:

Msg 2788, Level 16, State 2
Synonyms are invalid in a schemabound object or a constraint expression.

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

关于sql-server - 在计算列中使用另一个数据库中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19035020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com