我在SSMS 2017中遇到了一个问题。我正在尝试设置一个在backgroud中运行SQL脚本的内部应用程序。在设置过程中,我收到以下错误:
异常:执行脚本失败:xxx.sql ..无法解析 “SQL_Latin1_General_CP1_CI_AS”与“SQL_Latin1_General_CP1_CI_AS”之间的整理冲突 UNION操作中的“Latin1_General_CI_AS”..
我尝试过以下方法来解决问题但仍然存在:
值得注意的是,同一SQL实例上的其他数据库(按预期工作)的默认排序规则设置为“Latin1_General_CI_AS”。此外,我无法在SQL脚本中进行更改,因为它在后台运行。我只能在SSMS数据库中进行更改。
可能导致此问题的原因是什么?另外,我还可以尝试解决此问题吗?
答案 0 :(得分:0)
更改数据库排序规则不会更新已经分配了不同排序规则的列,因此问题是:某些表中某些列可能错误地设置为不同排序规则的几率是多少?您测试的空白数据库的创建?如果您在其中一个空白数据库中运行以下查询,您会得到结果吗?
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
;
如果您的列不匹配,您可以尝试首先执行更新这些特定字段的排序规则的脚本,从而允许您的第二个脚本无错误地执行。如果脚本依赖于匹配的排序规则,那么最好合并这个检查/修复,因为将来可能遇到同样的问题。
是否根据旧的有问题的数据库从脚本创建了空白数据库?如果是这样,我必须假设在该数据库中对您的排序规则进行了干预,问题只是逐渐渗透到新的空白数据库中。
答案 1 :(得分:0)
在同一SQL上的其他数据库(按预期工作) 实例的默认排序规则设置为&#34; Latin1_General_CI_AS&#34;
这让我觉得你的Server Collation
是Latin1_General_CI_AS
,无论如何,你可以这样检查:
select SERVERPROPERTY('Collation')
因此,您的server collation
为Latin1_General_CI_AS
,但您的应用程序正在使用旧的(旧版)排序规则SQL_Latin1_General_CP1_CI_AS
。
我想它的表只有具有此排序规则的列,现在它对您的system databases
运行查询,并且所有系统表都有Latin1_General_CI_AS
,或者它只创建临时表还会继承Latin1_General_CI_AS
的{{1}}。
如果你无法访问它的代码(似乎应用程序写了你正在使用的文件:tempdb
),你应该安装另一个SQL Server实例,在安装过程中选择xxx.sql
为{{1 }}
如果您可以访问应用程序执行的代码,请使用它更新您的问题,也许可以使用SQL_Latin1_General_CP1_CI_AS
子句进行更改。