2015-01-14 101 views
10

在Visual Studio 2013中,我創建了一個數據庫項目並導入了一個現有的數據庫。起初一切都很好,而且該項目的建立和生產創建了腳本。Visual Studio認爲正確的SQL語法不正確

但是,現在Visual Studio似乎認爲有SQL語法錯誤,返回幾個SQL46010: Incorrect syntax near:錯誤。這些都是由VS生成的代碼 - 我沒有寫過任何代碼。

例1:

ALTER ROLE [db_owner] ADD MEMBER [SomeUser]; 
SQL46010: Incorrect syntax near ADD. 

例2:

DECLARE @Foo NVARCHAR(7) = 'abcdefg'; 
SQL46010: Incorrect syntax near =. 

如果我複製/粘貼代碼到SSMS,一切工作正常。

不幸的是,這些阻止項目建設,這意味着我無法發佈。由於它們是錯誤的,而不是警告,所以我不能在項目設置中將它們設置爲忽略。

存在解決方法,我可以將問題文件的構建操作設置爲無,但在發佈時需要包含這些文件。

我曾嘗試:

  • 刪除並重新添加相同的代碼
  • 複製/粘貼代碼到新的SQL文件
  • 關閉並重新打開解決方案
  • 關閉並重新打開視覺Studio
  • 正在更新Microsoft SQL Server數據工具(SSDT)
  • Updatin摹的Visual Studio

我已經能夠找到最近的問題是從2012年this MSDN thread,指出有一個bug SSDT SQL語法分析程序(這促使我嘗試更新SSDT)。

回答

21

項目屬性中有一個名爲Target platform的設置,它告訴VS檢查語法的哪個版本的SQL Server。

這些是對T-SQL語法的相對較新的補充,如果語法設置爲例如,它們可能不起作用。 SQL Server 2005中

Visual Studio 2013 database project settings

0

舊線程,但這個沒趕上我了,所以我想我會分享我的經驗,爲ALTER ROLE的文件似乎表明,它實際上是在當支持SQL 2008只部分功能是。您可以使用更改角色更改角色的名稱,即ALTER ROLE [ROLE NAME] WITH [NEW ROLE NAME] 但是,要從角色添加或刪除成員,必須使用舊的(現在不推薦使用的)存儲過程sp_addrolememeber,即sp_addrolemember 'Role Name', 'User Name'
正如Aaroninus指出,如果您的目標SQL 2012或更高版本,這不會報告爲錯誤。

0

不得不在項目中設置一個標誌是非常愚蠢的,因爲我已經在我的C#類項目中的oracle和mssql中獲得了ddl sql腳本。