【发布时间】:2018-06-18 12:48:19
【问题描述】:
Azure SQL Server 具有 SQL_Latin1_General_CP1_CI_AS 的固定排序规则。我有一个带有 Latin1_General_CI_AS 排序规则的 Azure SQL 数据库。在创建表变量并加入数据库表时,我似乎遇到了排序规则冲突错误。代码如下:
DECLARE @resultingRoles TABLE ([MemberRoleName] NVARCHAR(256) NOT NULL PRIMARY KEY)
INSERT INTO @resultingRoles
SELECT DISTINCT([MemberRoleName]) FROM [RolesInRoles]
WHERE
[ApplicationName] = @applicationName AND
[MemberRoleName] IN (@role0,@role1,@role2)
WHILE (@@ROWCOUNT>0)
BEGIN
INSERT INTO @resultingRoles
SELECT DISTINCT([roles].[TargetRoleName])
FROM [RolesInRoles] AS [roles]
INNER JOIN @resultingRoles sj ON sj.[MemberRoleName] = [roles].[MemberRoleName]
LEFT JOIN @resultingRoles lf on [roles].[TargetRoleName] = lf.[MemberRoleName]
WHERE lf.[MemberRoleName] IS NULL
AND [roles].[ApplicationName] = @applicationName
END
这会导致以下错误:
无法解决等于操作中“Latin1_General_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。
我认为这是因为表变量列 MemberRoleName 是使用 SQL Server 排序规则而不是数据库排序规则创建的。我的期望是使用数据库排序规则 - 我错了吗?
有没有办法检查表变量的排序规则?
编辑:我无法更改此 SQL 代码以显式设置排序规则。
【问题讨论】:
标签: sql-server azure azure-sql-database