我有下面的代码,它不应该返回任何值。有没有人能找到任何有问题的东西?当我运行脚本时,我得到0值(0行受影响),即使我知道应该选择行。
这只是整个脚本的一部分,当我运行所有内容时,我收到错误消息“警告:聚合或其他SET操作消除了空值”。但我不知道这对我的剧本意味着什么。我在脚本中只有1个“分组依据”(由于编码工作原因,我不在此处发布)。有谁知道吗?
下面的代码应该创建一个临时表,并从表“StatusHistorik”中插入临时表插入行,满足以下条件:
1)[NyStatus] = 4(NyStatus是表“StatusHistorik”中的一列),
2)表“SKL_AdminKontroll_SkaÅtgärdas”(F)中不应存在变量“EnhetsId”。代码:“F.EnhetsId为null”。
我在两种情况下都使用了内连接。这应该导致临时表中的许多观察/行,但不返回任何内容。有没有人发现任何可以解释缺少结果的编码错误?
我应该提一下,当我“注释掉”最后一个内连接和where语句的最后一部分时,脚本按原样运行。所以我怀疑它是最后一个内部连接语句错误的。
declare @temp2 table (
EnhetsId varchar(50),
TjanstId Int,
Tabell varchar(50),
Kommentar ntext,
Uppdaterad datetime
);
WITH ENHET_AVSLUT AS
(
SELECT DISTINCT A.[EnhetsId]
FROM [StatistikinlamningDataSKL].[dbo].[StatusHistorik] A
inner join (
select [EnhetsId], max(SenastUppdaterad) as SenastDatum
from [StatistikinlamningDataSKL].[dbo].[StatusHistorik]
group by [EnhetsId]
) B
on A.[EnhetsId] = B.[EnhetsId] and A.[SenastUppdaterad] = B.SenastDatum
INNER JOIN
StatistikinlamningDataSKL.dbo.SKL_AdminKontroll_SkaÅtgärdas F ON A.EnhetsId = F.EnhetsId
WHERE [NyStatus] = 4 AND F.EnhetsId is null
)
insert into @temp2
(EnhetsId, TjanstId, Tabell, Kommentar, Uppdaterad)
SELECT
EnhetsId, 1, ''GR_PS09_1'', ''OK'', getdate()
from ENHET_AVSLUT
select * from @temp2
祝你好运, 汉纳斯
答案 0 :(得分:0)
因为你在说
The variable "EnhetsId" should not exist in the table "SKL_AdminKontroll_SkaÅtgärdas" (F). Code: "F.EnhetsId is null".
INNER JOIN将尝试连接表,并且无法对NULL值执行JOIN,因此结果将为零行。
因此,您必须尝试使用LEFT JOIN,无论满足JOIN条件,都将拉出LE LEFT表。
我必须警告你,如果表格很大,可能会出现性能问题。
您的内部SQL必须类似于
SELECT DISTINCT A.[EnhetsId]
FROM [StatistikinlamningDataSKL].[dbo].[StatusHistorik] A
inner join (
select [EnhetsId], max(SenastUppdaterad) as SenastDatum
from [StatistikinlamningDataSKL].[dbo].[StatusHistorik]
group by [EnhetsId]
) B
on A.[EnhetsId] = B.[EnhetsId] and A.[SenastUppdaterad] = B.SenastDatum
LEFT JOIN
StatistikinlamningDataSKL.dbo.SKL_AdminKontroll_SkaÅtgärdas F ON A.EnhetsId = F.EnhetsId
WHERE [NyStatus] = 4