2016-09-21 21 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您可以将它们分成不同的执行方法(这样您最终会在正确的位置看到错误)。否则,您可以使用;(在这种情况下,您可能无法使用;)。

相关问题