【发布时间】:2019-06-27 16:54:34
【问题描述】:
我正在尝试列出数据库中缺少的一些记录,as described in my unanswered question here
我现在正在尝试用应检查的数据填充临时表,并将其与数据库中的数据进行比较。我的查询如下:
create table #Temp
(
Component nvarchar(50),
AssetType nvarchar(50)
)
Insert Into #Temp (Component, AssetType) VALUES
('0990.LB00.000.06', '0738.D100.M00.60_03.03'),
('0738.D100.L00.55', '9211.D108.D07.01_02.02');
WITH DBD AS (
Select distinct C.Code Comp, AT.Code AssetType From astComponents C
Join astAssetTypes AT ON AT.Id = C.AssetTypeId
Where (C.Code = '0990.LB00.000.06' And AT.Code = '0738.D100.M00.60_03.03') OR (C.Code = '0738.D100.L00.55' And AT.Code = '9211.D108.D07.01_02.02')
),
Compare AS
(
Select T.* FROM #Temp T
Left Join DBD ON DBD.Comp = T.Component AND DBD.AssetType = T.AssetType
Where DBD.Comp is null
)
Select * From Compare
预期输出如下,因为数据库中不存在这种组件-资产类型组合
Component Asset Type
0990.LB00.000.06 0738.D100.M00.60_03.03
但是,我遇到了错误
消息 468,第 16 级,状态 9,第 22 行
无法解决等于操作中“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_BIN”之间的排序规则冲突。
【问题讨论】:
-
您是否尝试搜索该特定错误消息?这很清楚。您需要匹配两个排序规则才能在字符串类型之间进行任何类型的比较。
-
问题表达方式是什么?
-
@EzLo 我做到了,但我仍然是一个 SQL 新手,无法正确理解解决方案的确切含义。你建议我做什么,我认为这与设置临时表有关?
-
@jarlh 这是 CTE,尤其是
Left Join行 -
该问题表明您的表格设计不一致。应该比较的列应该用相同的排序规则声明。 (通常。)
标签: sql sql-server common-table-expression