DbMigration.SqlFile method需要一個sqlFile
參數,該參數需要磁盤上的SQL文件路徑,該路徑在調用該方法時執行。GO允許在傳遞給DbMigration.SqlFile的SQL文件中嗎?
問題
提供給DbMigration.SqlFile方法的sqlFile
參數SQL文件允許使用GO
關鍵字單獨的SQL語句的多批次?
是否允許GO
根據SQL Server版本,實體框架版本,.NET運行時版本或其他因素而有所不同?
全面的背景
我的項目使用實體框架版本6.
我有一個實體框架遷移類從DbMigration繼承這只是運行磁盤上的SQL文件,如:
public override void Up()
{
this.SqlFile("/sql/StoredProcedures/MyMigrationFile.sql");
}
該文件的內容是這樣的:
DROP PROCEDURE [dbo].[MyStoredProcedure]
GO
CREATE PROCEDURE [dbo].[MyStoredProcedure]
@MyParameter int
AS
[Stored procedure SQL body here...]
事實上,我的項目有幾十個移民類和SQL文件就是這樣,既然他們已經工作得很好,至少一月2016
當我的團隊的持續集成服務器上運行他們仍然正常工作(使用Visual Studio 2015和SQL Server 2014)。
然而,截至昨天,當我試圖運行在我的本地環境的遷移(與Visual Studio 2017年和SQL Server 2016),他們失敗,出現錯誤:
Incorrect syntax near 'GO'.
所以,問題:
- 是否支持與DbMigration.SqlFile方法一起使用的SQL文件中的
GO
,還是不支持? - 我的本地開發PC和我的團隊的CI服務器之間的相關區別是什麼,導致遷移失敗本地,但在CI中正常工作?
'GO'不是T-SQL命令,它是'sqlcmd'的批處理分隔符和在SSMS中執行的腳本。在任何其他情況下,「GO」將不起作用。特別是,當腳本作爲批處理按原樣傳遞給SQL Server時,「GO」不起作用。這聽起來就像你的設置發生了什麼 - 由於什麼原因我不能說。檢查一些像CR/LF不匹配或不可見字符這樣的奇怪事情,這些字符可能會導致代碼嘗試通過「GO」分隔事物。 –