Неявное преобразование значения varchar в varchar не может быть выполнено из-за конфликта сопоставления - PullRequest
0 голосов
/ 03 февраля 2020

Когда я пытаюсь изменить параметры сортировки столбца в SQL Сервер, я получаю следующую ошибку:

Неявное преобразование значения varchar в varchar не может быть выполнено, поскольку сопоставление значения не разрешен из-за конфликта сопоставления между «Latin1_General_CS_AI» и «SQL_Latin1_General_CP1_CI_AS» в операторе добавления.

Ниже приведен запрос c, который я пытаюсь выполнить. Я получаю одну и ту же ошибку независимо от того, запускаю ли я запрос вручную или использую GUI.

ALTER TABLE myTable ADD myColumn NVARCHAR(152) COLLATE Latin1_General_CS_AI NULL;

Редактировать: После дальнейших копаний я думаю, что проблема может возникнуть, когда * Сервер 1021 * пытается перестроить один из триггеров на столе. Частично показано ниже ... Я прошу прощения за ужасное форматирование, но я не могу заставить его правильно отформатировать

Редактировать 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 + 

1 Ответ

0 голосов
/ 04 февраля 2020

как насчет принудительного сопоставления в запросе:

, если, например, происходит на field1 = field2

, вы можете принудительно задать его следующим образом:

field1 collate Latin1_General_CI_AS = field1 collate Latin1_General_CI_AS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...