2016-09-21 20 views
1

我與EF 6我是否需要明確地添加SET ANSI_NULLS上的EntityFramework遷移

string sqlQuery = @" 
          /****** Object: StoredProcedure [dbo].[GetSalesByLocation] Script Date: 9/21/2016 8:32:36 AM ******/ 
          SET ANSI_NULLS ON GO 

          SET QUOTED_IDENTIFIER ON GO 

          CREATE PROCEDURE [dbo].[GetSalesByLocation] 
                @MerchantID bigint, 
                @LocationID bigint, 
                @AccountAccessID bigint, 
                @KioskID bigint, 
                @StartDate DATETIME, 
                @EndDate DATETIME 
          AS 
          BEGIN 
          ..... 
          END 
          GO"; 
       Sql(sqlQuery); 

寫遷移stored procedure當我嘗試運行Update-database命令我得到以下錯誤

Incorrect syntax near 'GO'. 
Incorrect syntax near 'GO'. 
'CREATE/ALTER PROCEDURE' must be the first statement in a query batch. 
Incorrect syntax near 'GO'. 

此外,當我創建SP沒有

SET ANSI_NULLS ON GO         
SET QUOTED_IDENTIFIER ON GO 

並打開SQL管理工作室我可以看到上面的語句自動添加。

所以我的問題是,如果我正在爲存儲過程編寫遷移,我需要`顯式設置ansi null?

+0

你可以顯示你的'OnModelCreating()'方法嗎? – Sampath

+0

注意:在T-SQL中寫東西時,「GO」應該在自己的行上。也就是說,'GO'不是嚴格的T-SQL(請參閱這裏的評論:https://msdn.microsoft.com/en-us/library/ms188037.aspx),所以我不確定你甚至可以創建這樣的程序。編輯:至於手頭的問題,這取決於你的設置。當你有正確的設置時,並不是絕對必要的,但爲了以防萬一,這可能是一個好習慣。 – ZLK

+0

@Sampath:存儲過程 –

回答

0

在過程外部SET ANSI_NULL和SET QUOTED_IDENTIFIER僅影響會話的SQL Server行爲(所以它不會寫入存儲過程,並且不會影響存儲過程運行時的存儲過程行爲)。
此外,SET ANSI_NULL ON是默認值(嘗試SQMS上的SELECT GETANSINULL()),因此您可以忽略它。您也可以省略SET QUOTED_IDENTIFIER ON(您正在使用[]引用標識符而不是")。
如果您需要在同一連接上運行更多語句,請在Management Studio中使用GO,使用ADO您可以將它們分成不同的執行方法(這樣您最終會在正確的位置看到錯誤)。否則,您可以使用;(在這種情況下,您可能無法使用;)。

相關問題