【发布时间】:2017-02-07 20:06:00
【问题描述】:
我正在使用一个编写不佳的应用程序,该应用程序连接到使用区分大小写的SQL_Latin1_General_CP850_BIN2 排序规则的服务器。应用程序出于某种原因尝试引用 sys.Tables(注意大写 T)而不是 sys.tables 导致它失败。
是否有任何半合理的方法来创建一个简单地指向 sys.tables 的 sys.Tables 别名?或者除了修复应用程序之外,还有其他方法可以解决此问题其他吗?
环境
- MS SQL 2016 SP1 (13.0.4199.0)
- Windows 2012 R2
- 应用通过 .Net 连接器/框架连接
【问题讨论】:
-
排序规则设置在数据库级别,而不是连接级别...您确定您正在查看问题的正确根源吗?
-
@JiggsJedi:不管 OP 使用什么术语,问题不会以同样的方式表现出来吗?即,如果数据库有区分大小写的排序规则,尝试将对象引用为
sys.Tables将导致“找不到对象错误”。 -
@JiggsJedi 我的问题措辞很糟糕(我刚刚编辑了它)。它连接到排序规则区分大小写的服务器。然而,该应用程序不正确地引用了
sys.Tables。不幸的是,我无法更改服务器排序规则,因为它被其他依赖于默认排序规则的应用程序使用。 -
确实如此,但不是这里的应用程序或连接有问题;了解根本原因会产生不同的解决方案。结果是一样的,我完全同意你的看法,但修复方法不是。
-
@jak119 -- 在这种情况下,我不相信有办法为系统表创建同义词。也许这里有其他的 SQL 头脑可以想到一个方法,但我不知道。
标签: sql .net sql-server