【问题标题】:User defined TYPE across databases跨数据库的用户定义类型
【发布时间】:2012-03-23 19:35:28
【问题描述】:

我有一个数据库,其中包含我在多个数据库中使用的常用函数。其中一个函数将表作为参数,该参数是用户定义的 TYPE。我想知道是否有办法从另一个数据库调用这个函数。

我尝试像这样在其他数据库中定义类型:

DECLARE @bits as Common.dbo.Bits

但是我收到一个错误太多前缀

我尝试将TYPE添加到每个数据库,然后将该类型的表传递给公共数据库中的函数,但出现错误

操作数类型冲突:Bits 与 Bits 不兼容

【问题讨论】:

  • 您不能在其他数据库中创建所有需要的类型,作为数据库首次设置过程的一部分吗?
  • @vulkanino 我可以,但正如我所见,它们不是同一类型
  • 这很有趣,差不多一年后,我又遇到了同样的错误。这次是不同的架构

标签: sql-server-2008 tsql user-defined-functions


【解决方案1】:

你不能。即使您在两个数据库中声明相同的类型,它们的处理方式也不相同。而DECLARE 语句只允许使用模式名和对象名,因此无法从其他数据库引用类型。

另请参阅this question 了解一些可能的解决方法(如果您控制所涉及的两个数据库)

【讨论】:

  • 很遗憾,这不是我想听到的答案。谢谢
  • @Damien_The_Unbeliever 微软这样做不奇怪吗?这有点像在 C# 中,除非它位于当前目录中的文件上,否则不能使用文件中的类?
  • @Kulingar - 如果您在两个不同的程序集中工作,并且您创建了具有相同(完整)名称和成员的两种类型,您仍然不能(直接)替换另一种。
  • @Damien_The_Unbeliever 感谢您一直以来的回答,这在过去的一个小时里让我有些头疼。
【解决方案2】:

根据Creating User-Defined Data Types

如果在 model 数据库中创建了用户定义的数据类型,它 存在于所有新的用户定义数据库中。但是,如果数据类型是 在用户定义的数据库中创建的,数据类型只存在于那个 用户自定义数据库。

【讨论】:

  • Model 数据库确实如此,但我不认为它们是同一类型。此外,我正在使用现有数据库。
猜你喜欢
  • 1970-01-01
  • 2014-12-31
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多