SQL 实例级别的服务器排序规则更改
SQL server collation change on the instance level
从我们的应用程序创建数据库时,它采用默认排序规则。我们不想在创建数据库脚本中传递排序规则。
客户端在实例级别设置了区分大小写的排序规则。所以为我们的应用程序创建的数据库是我们不想要的那种排序规则。
他们能否更改实例级别的排序规则,以便创建的数据库具有所需的排序规则,并且他们可以将其更改回他们想要的任何内容?我们如何在实例级别执行此操作?
感谢您的宝贵时间!
您可以配置实例排序规则,这需要在更改之前删除数据库。 Here is a link to setting or changing the Server Collation.
您也可以在数据库级别执行此操作。 Here is information on setting or changing collation on the database level.
您可能还想阅读 the collation clause,它也可以在其他选项中应用于表、列和转换表达式。
所以问题是数据库不是由 运行 在 SQL Management Studio 中创建的脚本,而是从应用程序内部启动的脚本。
如评论和另一个答案中所述,更改服务器排序规则是可能的,但很麻烦,在这种情况下,最好的选择是创建空数据库,更改排序规则(使用 ALTER DATABASE
或从管理Studio),然后创建数据库的其余部分。
这需要更改应用程序,但只需要创建数据库本身,因为表将采用数据库的排序规则,而不是服务器排序规则(您可以采用适用于每个客户端的方式来完成,检查数据库是否存在,如果存在则跳过数据库创建并继续处理其余对象)。
作为最后的警告,请注意,如果数据库的排序规则与服务器排序规则不同,则意味着该数据库的排序规则与 tempdb 不同,因此如果您使用时态表,则如果您有 WHERE
或 JOIN
混合时态表和常规表。例如,假设 SerialNumber
是一个 char 列,此查询将失败并出现排序错误:
SELECT *
FROM Products
JOIN #TempTable ON #TempTable.SerialNumber=Products.SerialNumber
如果是这种情况,您将不得不修改应用程序并将查询更改为如下内容:
SELECT *
FROM Products
JOIN #TempTable ON #TempTable.SerialNumber=Products.SerialNumber COLLATE database_default
从我们的应用程序创建数据库时,它采用默认排序规则。我们不想在创建数据库脚本中传递排序规则。
客户端在实例级别设置了区分大小写的排序规则。所以为我们的应用程序创建的数据库是我们不想要的那种排序规则。
他们能否更改实例级别的排序规则,以便创建的数据库具有所需的排序规则,并且他们可以将其更改回他们想要的任何内容?我们如何在实例级别执行此操作?
感谢您的宝贵时间!
您可以配置实例排序规则,这需要在更改之前删除数据库。 Here is a link to setting or changing the Server Collation.
您也可以在数据库级别执行此操作。 Here is information on setting or changing collation on the database level.
您可能还想阅读 the collation clause,它也可以在其他选项中应用于表、列和转换表达式。
所以问题是数据库不是由 运行 在 SQL Management Studio 中创建的脚本,而是从应用程序内部启动的脚本。
如评论和另一个答案中所述,更改服务器排序规则是可能的,但很麻烦,在这种情况下,最好的选择是创建空数据库,更改排序规则(使用 ALTER DATABASE
或从管理Studio),然后创建数据库的其余部分。
这需要更改应用程序,但只需要创建数据库本身,因为表将采用数据库的排序规则,而不是服务器排序规则(您可以采用适用于每个客户端的方式来完成,检查数据库是否存在,如果存在则跳过数据库创建并继续处理其余对象)。
作为最后的警告,请注意,如果数据库的排序规则与服务器排序规则不同,则意味着该数据库的排序规则与 tempdb 不同,因此如果您使用时态表,则如果您有 WHERE
或 JOIN
混合时态表和常规表。例如,假设 SerialNumber
是一个 char 列,此查询将失败并出现排序错误:
SELECT *
FROM Products
JOIN #TempTable ON #TempTable.SerialNumber=Products.SerialNumber
如果是这种情况,您将不得不修改应用程序并将查询更改为如下内容:
SELECT *
FROM Products
JOIN #TempTable ON #TempTable.SerialNumber=Products.SerialNumber COLLATE database_default