sql server 2014为什么我在视图中得到代码错误而不是存储过程

时间:2016-09-24 11:38:22

标签: sql sql-server sql-server-2014

当我尝试将以下代码添加到视图时:

SELECT [Albi-Anagrafe-Associati].AnaUnica,
       [Albi-Anagrafe-Associati].Albo,
       [Albi-Anagrafe-Associati].Comune,
       [Albi-Anagrafe-Associati].ComunePDC,
       IIf([Comune] <> [ComunePDC], 'NO', 'OK') AS Attenzione,
       [Albi-Anagrafe-Associati].Paghe,
       [Albi-Anagrafe-Associati].ContOrd,
       [Albi-Anagrafe-Associati].ContSem
FROM   [Albi-Anagrafe-Associati]
WHERE  ( ( ( [Albi-Anagrafe-Associati].ComunePDC ) <> 'Extra Provincia' )
         AND ( ( IIf([Comune] <> [ComunePDC], 'NO', 'OK') ) = 'NO' ) ); 

我收到错误:

  

函数参数列表出错:&#39;&lt;&#39;未识别。
  无法解析查询文本。

但是当我在存储过程中添加相同的代码时,我没有错误。

行为不同的原因是什么?

2 个答案:

答案 0 :(得分:1)

您的查询非常复杂,无法阅读。你听说过表别名吗?

Iterator

注意:

  • 如果您无法阅读查询,那么您真的无法做到这一点。写下您的查询,以便阅读它们。
  • 短表别名(表名的缩写)使查询更容易编写和阅读。
  • 过度使用括号也无济于事。
  • 我更喜欢SELECT aa.AnaUnica, aa.Albo, aa.Comune, aa.ComunePDC, (case when Comune <> ComunePDC then 'NO' end 'OK' end ) AS Attenzione, aa.Paghe, aa.ContOrd, aa.ContSem FROM [Albi-Anagrafe-Associati] aa WHERE (aa.ComunePDC <> 'Extra Provincia' AND Comune <> ComunePDC ; -- May need to check for `NULL` as well CASE,因为前者是ANSI标准SQL,后者是MS Access的后兼容性。

答案 1 :(得分:1)

此错误来自视觉设计师。这显然还没有更新,以应对最新的语法添加。

不要使用它。无论如何,它是buugy并且非常有限。只需打开一个新的查询窗口并执行

CREATE VIEW dbo.SomeName
AS
/*Paste your code here*/

如果您的版本晚于2012年,它将正常工作。

您的代码中没有实际的语法错误,但有几件事情可以改进。

修复格式,删除不需要的两个部分名称并简化WHERE子句和SELECT列表结果

SELECT AnaUnica,
       Albo,
       Comune,
       ComunePDC,
       'NO' AS Attenzione, /*Guaranteed by the WHERE that [Comune] <> [ComunePDC]*/
       Paghe,
       ContOrd,
       ContSem
FROM   dbo.[Albi-Anagrafe-Associati]
WHERE  ComunePDC NOT IN ('Extra Provincia',Comune);