sqlserver整理是否意味着列名必须正确?以及如何处理

时间:2009-01-30 18:33:55

标签: sql-server sql-server-2005 collation case-sensitive

在SQL Server(2000或2005)中,是否可以设置数据库或服务器排序规则,以便标识符名称(表,列等)需要处于正确的大小写?如果是这样,所有区分大小写的排序规则都是如此,还是单独设置? (我一直认为应用于数据的区分大小写,而不是对象的名称)。

如果应用程序的存储过程和查询没有写入一致的情况,那么这可能会破坏应用程序?有没有办法处理这个问题而不必确保所有查询都使用正确的大小写,例如设置数据库连接的排序规则?

我从一个现有的应用程序的角度来看这个,它可能在其中包含不一致的sql代码,并且我希望能够针对具有不同排序规则的数据库运行它。我需要哪些设置或哪些数据库/服务器排序规则我不能使用该应用程序?

4 个答案:

答案 0 :(得分:2)

排序规则决定了您的查询是否不区分大小写。因此,确保您的架构可以针对多个环境工作的唯一方法是让您的查询区分大小写。如果您的查询不一致,那么您的校对必须不区分大小写,否则它将无效。

http://msdn.microsoft.com/en-us/library/aa174903(SQL.80).aspx

需要注意的是,一旦您使用某种排序规则设置了SQL Server环境,就无法在不创建新SQL Server实例的情况下更改它。所以Case-Insensitive通常是要走的路。然后努力使您的查询保持一致。

一旦设置了整理,我相信它同时适用于数据和元数据。

答案 1 :(得分:1)

在早期版本的SQL Server中设置了排序规则,但在2005年及以后,您可以在创建它们时按对象更改它。

答案 2 :(得分:1)

数据库默认排序规则确定是否在查询中以区分大小写的方式处理数据库中的对象 - 这适用于所有对象名称:表,列等。

如果您的应用程序代码来自不区分大小写的排序规则数据库,则如果对象被错误引用,则它可能无法在区分大小写的排序规则数据库上运行(当您尝试运行该语句或创建存储过程时,您将收到一条消息或者在存储过程体系结构中,除非你有大量的动态SQL,否则你会非常快速地捕获所有这些。)

请记住,即使您的代码运行,也可以使用与数据库不同的排序规则设置各个列,因此使用不同的排序规则,您的代码将始终出现意外行为(例如,GROUP BY的行为方式不同)。

答案 3 :(得分:0)

您可以为每个对象设置排序规则,并为数据库和服务器设置默认值。

如何处理?您需要在此处执行标准。你可以轻易地让不同的人用不同的案例写下自己。

整理也适用于数据,因此“bob”!=“Bob”