【问题标题】:Alias for sys.tables in SQLSQL 中 sys.tables 的别名
【发布时间】: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


【解决方案1】:

未在连接级别设置 SQL Server 排序规则。它是在服务器/数据库级别设置的。

我会先检查你的服务器/数据库...

SELECT CONVERT (varchar, SERVERPROPERTY('collation')); 

SELECT name, collation_name FROM sys.databases;  

查看归类信息: https://msdn.microsoft.com/en-us/library/hh230914.aspx

如有必要,更改排序规则(当然是在测试之后)。

设置或更改排序规则: https://msdn.microsoft.com/en-CA/library/ms175835.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2023-01-17
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    相关资源
    最近更新 更多