sql - 由于排序规则冲突,无法执行 varchar 值到 varchar 的隐式转换
问题描述
当我尝试更改 SQL Server 中列的排序规则时,出现以下错误。
无法执行 varchar 值到 varchar 的隐式转换,因为 add 运算符中的“Latin1_General_CS_AI”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突导致值的排序规则未解析。
以下是我尝试运行的特定查询。无论我是手动运行查询还是使用 GUI,我都会收到相同的错误。
ALTER TABLE myTable ADD myColumn NVARCHAR(152) COLLATE Latin1_General_CS_AI NULL;
编辑: 在进行更多挖掘后,我认为当 sql server 尝试重建表上的触发器之一时可能会出现问题。部分显示如下...我为糟糕的格式道歉,但我似乎无法正确格式化
编辑 2:感谢您修复我的格式!:) 下面代码部分底部的行似乎是错误的来源。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[payee_audit_update_trigger] on [dbo].[payee] for update as
begin
set nocount on
declare @userId varchar(50), @sqlStatement varchar(255), @appId int, @transactionId int, @insertChangedValues varchar(255), @auditEnabled char(1), @timezoneOffsetMinutes int
exec AuditGetSessionInfo @@rowcount, @userId output, @sqlStatement output, @appId output, @transactionId output, @insertChangedValues output, @auditEnabled output, @timezoneOffsetMinutes output
if (@auditEnabled = 'N')
return
declare @auditDate datetime
set @auditDate = dateadd(MINUTE, @timezoneOffsetMinutes, getutcdate())
insert into audit_log_tx (company_id, application_id, change_date_time, id, table_name, transaction_id, user_id, sql_statement, primary_key_crc, primary_key_values, changed_values)
select inserted.company_id,@appId, @auditDate, dbo.AuditGetRowId(newId()), 'payee', @transactionId, @userId, @sqlStatement, binary_checksum(rtrim(inserted.id)), rtrim(inserted.id),
case when (inserted.company_id = deleted.company_id) or (inserted.company_id is null and deleted.company_id is null) then '' else 'company_id|' + case when deleted.company_id is null then '<null>' else rtrim(deleted.company_id) end + '|' + case when inserted.company_id is null then '<null>' else rtrim(inserted.company_id) end + '^' end + ...
------
case when (inserted.w4_status = deleted.w4_status) or (inserted.w4_status is null and deleted.w4_status is null) then '' else 'w4_status|' + case when deleted.w4_status is null then '<null>' else rtrim(deleted.w4_status) end + '|' + case when inserted.w4_status is null then '<null>' else rtrim(inserted.w4_status) end + '^' end +
解决方案
如何在查询中强制排序:
例如,如果发生在field1 = field2
你可以像这样强制它:
field1 collate Latin1_General_CI_AS = field1 collate Latin1_General_CI_AS
推荐阅读
- html - 关于如何使此导航链接显示在更宽的屏幕(桌面等)上的任何有用提示?
- javascript - 对本地依赖项的更改不会传播 - npm / webpack
- java - 有人能告诉我我的代码有什么问题吗
- java - 如何配置 RDF4J Rio 编写器以编写带有特殊字符的 IRI?
- proxy - 基本 squid wss 反向代理
- java - 在 android studio 中构建回收站视图时出错
- javascript - 声明的包“com.spade”与本机反应中的预期包“”不匹配
- java - 无法通过 Intents 将用户的当前位置从一个 Activity 传递到另一个
- javascript - 为什么当我搜索其他内容时会删除以前的内容
- angular - 如何从 html 中的自定义验证器获取错误?