MS SQL案例嵌套错误,但未嵌套
我在MS SQL上遇到问题:MS SQL案例嵌套错误,但未嵌套,sql,sql-server,Sql,Sql Server,我在MS SQL上遇到问题: 在我看来,我正在使用一个包含许多语句的案例,如下所示: select e.[Nom d'annuaire], e.[Prénom annuaire], f.[Nom d'annuaire en UTF-8] AS login, e.Usagers as [Numéro interne], d.[Numéro externe], s.[Préfixe No abr direct], v.fonction, CASE WHEN v.lib_d
在我看来,我正在使用一个包含许多语句的案例,如下所示:
select
e.[Nom d'annuaire],
e.[Prénom annuaire],
f.[Nom d'annuaire en UTF-8] AS login,
e.Usagers as [Numéro interne],
d.[Numéro externe],
s.[Préfixe No abr direct],
v.fonction,
CASE
WHEN v.lib_delegation = 'Service informatique' THEN 'Euralille'
WHEN v.delegation = 'test_national' THEN 'Maillot'
WHEN v.delegation = 'test_tpe' THEN 'Maillot'
WHEN v.delegation = 'test_paris-idf' THEN 'Maillot'
WHEN v.delegation = 'test_grands-comptes' THEN 'Maillot'
WHEN v.delegation = 'cotestrm' THEN 'Marcq en baroeul'
WHEN v.delegation = 'test_sud-ouest' THEN 'Bruges'
WHEN v.delegation = 'test_normandie' THEN 'Caen'
WHEN v.delegation = 'test_bourgogne' THEN 'Dijon'
WHEN v.delegation = 'test_ouest' THEN 'Ouest'
WHEN v.lib_delegation = 'Centre Limousin' THEN 'Tours'
WHEN v.delegation = 'test_est' THEN 'Nancy'
WHEN v.delegation = 'test_mediterranee' THEN 'Aix'
WHEN v.delegation = 'test_rhone-alpes' THEN 'Lyon'
ELSE v.delegation
END AS Délégation,
v.lib_delegation
from ale e
INNER JOIN ale f
on e.Usagers = f.Usagers AND f.[No alias] = 1 and e.[No Alias] = 0
INNER JOIN Delegation d
on f.Usagers = d.[No annuaire]
INNER JOIN V_users v
on v.LOGIN = f.[Nom d'annuaire en UTF-8]
LEFT OUTER JOIN svi s
on e.Usagers = s.[No d'appel]
order by e.Usagers
正如您所看到的,我的CASE语句不是nasted,因为我在使用时。。。然后…
syntax,然后我简单地把ELSE。。。结束
语句
但是,当我尝试使用示例过滤器过滤我的输出时:
WHERE [Délégation] = 'Euralille'
我只得到两个错误:Msg 8180,第16级,状态1,第1行
Msg 125,第15级,第4状态,第1行 错误编号的说明:
- Msg 8180=无法准备语句
- Msg 125=大小写表达式只能嵌套到级别%d
我一直在MS SQL网站和StackOverflow上寻找答案,但问题始终是CASE语句被nasted。但对我来说,我不是在这种情况下
提前谢谢,我是这个世界的初学者。你是这样过滤的吗?请注意,我将所有查询放入子查询中,然后应用where子句:
select * from
(select
e.[Nom d'annuaire],
e.[Prénom annuaire],
f.[Nom d'annuaire en UTF-8] AS login,
e.Usagers as [Numéro interne],
d.[Numéro externe],
s.[Préfixe No abr direct],
v.fonction,
CASE
WHEN v.lib_delegation = 'Service informatique' THEN 'Euralille'
WHEN v.delegation = 'test_national' THEN 'Maillot'
WHEN v.delegation = 'test_tpe' THEN 'Maillot'
WHEN v.delegation = 'test_paris-idf' THEN 'Maillot'
WHEN v.delegation = 'test_grands-comptes' THEN 'Maillot'
WHEN v.delegation = 'cotestrm' THEN 'Marcq en baroeul'
WHEN v.delegation = 'test_sud-ouest' THEN 'Bruges'
WHEN v.delegation = 'test_normandie' THEN 'Caen'
WHEN v.delegation = 'test_bourgogne' THEN 'Dijon'
WHEN v.delegation = 'test_ouest' THEN 'Ouest'
WHEN v.lib_delegation = 'Centre Limousin' THEN 'Tours'
WHEN v.delegation = 'test_est' THEN 'Nancy'
WHEN v.delegation = 'test_mediterranee' THEN 'Aix'
WHEN v.delegation = 'test_rhone-alpes' THEN 'Lyon'
ELSE v.delegation
END AS Délégation,
v.lib_delegation
from ale e
INNER JOIN ale f
on e.Usagers = f.Usagers AND f.[No alias] = 1 and e.[No Alias] = 0
INNER JOIN Delegation d
on f.Usagers = d.[No annuaire]
INNER JOIN V_users v
on v.LOGIN = f.[Nom d'annuaire en UTF-8]
LEFT OUTER JOIN svi s
on e.Usagers = s.[No d'appel]
order by e.Usagers) as subTotalQuery
WHERE [Délégation] = 'Euralille'
Msg 125
似乎意味着您在CASE
语句中有太多(>10)WHEN…THEN
子句。如果我是你,我会将数据移动到一个单独的表中,然后执行一个JOIN
,在你的问题中包含实际的错误消息(不仅是错误号、严重性等)也会有很大帮助。我的一个朋友告诉我,他使用了大量的CASE语句(也比本例中的语句要多),他没有得到相同的错误。他也不明白…我可以把它包括在内,但实际上这是法语,我是一个糟糕的翻译…我已经包括了我尝试过的错误描述,但我不得不删除e.Usagers的顺序,因为它不允许在子请求中,我得到了相同的错误。看起来你有这个问题:。在链接服务器中不能使用超过10个case语句。感谢jle,我使用了一个过程来放置所有case,然后简单地使用EXEC“procedure Name”“MyArgument”就可以了。再次感谢