2016-09-24 48 views
0

的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')); 

我得到的錯誤:

Error in list of function arguments: '<' not recognized.
Unable to parse query text.

但是,當我在存儲過程中添加相同的代碼,我沒有得到任何錯誤。

行爲不同的原因是什麼?

+0

這簡化了WHERE條款和SELECT列表結果將不會出現在查詢造成的,你所顯示的,原因很簡單,它沒有標記'<'在裏面。 –

+0

有一個'<>'...如果你實際上閱讀查詢。 – Eminem

+0

該代碼在SQL Server 2014中解析得很好。什麼是@@ version'?另外你如何創建視圖?這聽起來不像你會遇到直接運行CREATE VIEW的SQL Server錯誤消息。 –

回答

1

這個錯誤來自視覺設計師。這顯然還沒有更新,以應付更新的語法增加。

不要使用它。無論如何,這是buugy並且非常有限。只需打開一個新的查詢窗口,並執行

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

,如果你是一個版本,它會正常工作於2012年

有雖然有幾件事情,可以在你的代碼中沒有實際的語法錯誤後改進。

固定的格式,刪除不需要的兩個部分名稱和

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); 
+0

非常好的觀察.. – Eminem

1

您的查詢是非常複雜的閱讀。你聽說過餐桌別名嗎?

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 

注:

  • 如果您無法讀取查詢,你真的不能做它。編寫你的查詢,以便你可以閱讀它們。
  • 短表別名(表名稱的縮寫)使查詢更易於編寫和讀取。
  • 過度使用括號也無濟於事。
  • 我更喜歡CASEIIF(),因爲前者是ANSI標準的SQL,後者是用於與MS Access的後兼容。
+0

Im從MS Access轉換到SQL Server 2014.現在Sql Server 2014已經有了內置的IIF功能..根據文檔。我想保持查詢代碼儘可能接近原始的 – Eminem

+0

也沒有丟失],據我所見 – Eminem

+0

甚至可以將此代碼添加到視圖:SELECT IIF(1> 0,'True','假'')作爲'輸出' – Eminem

相關問題