Как я могу преобразовать переменную из одного сопоставления в другое? - PullRequest
1 голос
/ 14 июня 2019

У меня есть скрипт, который переключается между двумя базами данных: master & 'B'.

Мастер базы данных имеет параметры сортировки 'SQL_Latin1_General_CP1_CI_AS'

База данных B имеет параметры сортировки 'Latin1_General_CI_AS'

Я пытался использовать команды COLLATE и CAST, но пока безрезультатно.

USE B
DECLARE @ProductsUserName varchar(200)
SET @ProductsUserName = 'SomeValue'

USE master 
DECLARE @UserNameMaster varchar(200) = @ProductsUserName COLLATE SQL_Latin1_General_CP1_CI_AS
DECLARE @GrantViewServerStatement varchar(200) = 'GRANT VIEW SERVER STATE TO ' + @UserNameMaster

Запрос взорвется в последней строке и выдаст ошибку:

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

Очевидно, что существует некоторая проблема с использованием'+ 'оператор между двумя varchars, которые имеют разные параметры сортировки.Но не уверен, как «преобразовать» переменную в новое сопоставление!

1 Ответ

0 голосов
/ 14 июня 2019

Выполните сопоставление как часть объединения строк.т.е.:

USE B
DECLARE @ProductsUserName varchar(200)
SET @ProductsUserName = 'SomeValue'

USE master 
DECLARE @UserNameMaster varchar(200) = @ProductsUserName
DECLARE @GrantViewServerStatement varchar(200) = 'GRANT VIEW SERVER STATE TO ' + (@UserNameMaster COLLATE SQL_Latin1_General_CP1_CI_AS)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...