Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 无法解决SQL脚本中的排序规则冲突问题_Sql Server - Fatal编程技术网

Sql server 无法解决SQL脚本中的排序规则冲突问题

Sql server 无法解决SQL脚本中的排序规则冲突问题,sql-server,Sql Server,我在2017年SSMS中面临一个问题。我正在尝试设置一个在后台运行SQL脚本的内部应用程序。在安装过程中,我发现以下错误: 异常:无法执行脚本:xxx.sql。。无法解决问题 SQL\u Latin1\u General\u CP1\u CI\u AS和之间的排序规则冲突 拉丁语1_General_CI_作为联合操作中的词 我尝试了以下方法来解决问题,但问题仍然存在: 用SqLyLaLin 1NyGalAlpCp1xCyIAS作为缺省排序创建空白数据库,然后再次运行安装程序。 用LATI1IGN

我在2017年SSMS中面临一个问题。我正在尝试设置一个在后台运行SQL脚本的内部应用程序。在安装过程中,我发现以下错误:

异常:无法执行脚本:xxx.sql。。无法解决问题 SQL\u Latin1\u General\u CP1\u CI\u AS和之间的排序规则冲突 拉丁语1_General_CI_作为联合操作中的词

我尝试了以下方法来解决问题,但问题仍然存在:

用SqLyLaLin 1NyGalAlpCp1xCyIAS作为缺省排序创建空白数据库,然后再次运行安装程序。 用LATI1IGNORALALL CURIAS作为缺省排序创建空白数据库,然后再次运行安装程序。 尝试将服务器上的本地语言更改为英国英语而不是美国英语,然后再次运行安装程序。 另外值得注意的一点是,在同一SQL实例上正常工作的其他数据库的默认排序规则设置为Latin1_General_CI_as。此外,我不能在SQL脚本中进行更改,因为它在后台运行。我只能在SSMS数据库中进行更改


是什么导致了这个问题?另外,我还可以尝试解决什么问题?

更改数据库排序规则不会更新已分配不同排序规则的列,所以问题是:在您测试的空白数据库的创建过程中,有些表中的某些列可能错误地被设置为不同的排序规则的可能性有多大?如果在其中一个空白数据库中运行以下查询,是否会得到结果

DECLARE @COLLATION AS VARCHAR(128);

SELECT @COLLATION = collation_name 
FROM sys.databases 
WHERE database_id = DB_ID()
;

SELECT C.*
FROM sys.Columns C
INNER JOIN sys.Tables T
    ON C.object_id = T.object_id
    AND T.is_ms_shipped = 0
WHERE C.collation_name <> @COLLATION
;
如果有不匹配的列,可以尝试首先执行一个脚本,更新这些特定字段的排序规则,从而允许第二个脚本无误地执行。如果脚本依赖于匹配的排序规则,那么最好合并此检查/修复,因为将来可能会遇到相同的问题

是基于旧的、有问题的数据库从脚本创建的空白数据库吗?如果是这样的话,我必须假设数据库中的排序规则受到了干扰,而问题仅仅是逐渐进入新的空白数据库

在同一SQL上按预期工作的其他数据库 实例的默认排序规则设置为Latin1\u General\u CI\u AS

这使我认为您的服务器排序规则是Latin1_General_CI_,无论如何,您可以通过以下方式进行检查:

select SERVERPROPERTY('Collation')
因此,您的服务器排序规则是Latin1_General_CI_AS,但您的应用程序使用的是旧的遗留排序规则SQL_Latin1_General_CP1_CI_AS

我想象它只是有一个表,其中的列有这种排序规则,现在它对您的系统数据库运行查询,并且您的所有系统表都有Latin1_General_CI_AS,或者它只是创建了临时表,这些临时表也继承了tempdb的Latin1_General_CI_AS

如果您无法访问其代码,则应用程序似乎编写了它正在使用的文件:xxx.sql,您应该安装另一个sql Server实例,并在安装过程中选择sql\u Latin1\u General\u CP1\u CI\u作为服务器排序规则

如果您可以访问应用程序执行的代码,请用它更新您的问题,也许可以使用COLLATE子句更改它