Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MS SQL案例嵌套错误,但未嵌套_Sql_Sql Server - Fatal编程技术网

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

我在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_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”就可以了。再次感谢