c# - 无法解决等于操作中“Cyrillic_General_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突
问题描述
微软 SQL 服务器 2017
ASP.NET 核心 2
我从 c# 调用存储过程:
res = db.Query<SearchPictureInfoOutputModel>("sp_SearchPictureInfo", new { Prc_ID = input.Prc_ID, Cust_ID = input.Cust_ID, AppCode = input.AppCode},
commandType: CommandType.StoredProcedure).FirstOrDefault();
我得到错误:
System.Data.SqlClient.SqlException:'无法解决等于操作中“Cyrillic_General_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。
如果我从 ms 管理工作室调用程序
DECLARE @return_value int
EXEC @return_value = [dbo].[sp_SearchPictureInfo]
@Prc_ID = 2663,
@Cust_ID = 26429,
@AppCode = N'19139'
SELECT 'Return Value' = @return_value
GO
没有错误,只是返回值。
我该如何解决排序规则?
解决方案
您的系统数据库很可能有不同的排序规则。
您可以通过在 SQL Management Studio 中执行以下查询来检查:
SELECT name, collation_name
FROM sys.databases
同样在非主数据库上,您可以使用右键单击 -> 属性 -> 常规 -> 维护,您将看到排序规则作为最后一个选项。
可以使用以下查询更改非主控:
USE master;
GO
ALTER DATABASE <<YOUR_DATABASE_OTHER_THAN_MASTER>>
COLLATE Latin1_General_CI_AS ;
GO
如果您必须更改主服务器(像我一样),您将无法通过 SQL 管理工作室。对我来说最简单的方法是停止它以及所有 SQL 服务,导航到 SQL 的 binn 文件夹(对于 2016 和 x64)是这样的:
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn
然后,如果您使用默认实例,只需运行:
sqlservr.exe -m -q"Latin1_General_CI_AS"
或您要设置的任何排序规则。如果您有多个实例,还添加以下参数:
-s"<<YOUR_SQL_INSTANCE>>" e.g. -> sqlservr.exe -m -s"SQLEXP2014" -q"Latin1_General_CI_AS"
希望这将帮助您解决您的问题:)
资料来源:
https://www.mssqltips.com/sqlservertip/3519/changeing-sql-server-collation-after-installation/
推荐阅读
- kotlin - 父挂起函数内部的这些挂起函数会按顺序运行吗?
- angular - 如何使用路由器出口仅在角度延迟加载概念的情况下加载侧面内容?
- cakephp - 重新安装 cake 命令
- hyperledger-fabric - 即使在 Hyperledger Fabric v1.4 中的背书策略失败后也提交了块
- typescript - React Native:如何从具有嵌套 json 数组的状态中检索数据并映射该状态以获取具有给定 id 的特定值
- c# - 尝试接受照片作为 Microsoft 聊天机器人附件并将其作为电子邮件附件发送 C#
- javascript - 过滤 HTML 内容?
- python - 如何在 keras 自定义层中更新参数(在每个时期基于该时期的输入状态)?
- ibm-mq - 如何清除 IBM MQ 中卡住超过 5 分钟的消息?
- reactjs - React Ref ScrollTop 总是返回 0