我有一个脚本可以在两个数据库之间切换: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”之间的排序规则冲突而导致无法解决该值的排序规则。”
很显然,在具有不同排序规则的两个varchar之间使用'+'运算符存在某种问题。但是不确定如何将变量“投射”到新的排序规则中!
答案 0 :(得分:0)
执行归类作为字符串连接的一部分。即:
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)