我是否需要在EntityFramework迁移中明确添加SET ANSI_NULLS ON

时间:2016-09-21 03:41:40

标签: sql-server entity-framework entity-framework-6

我正在使用stored procedure

编写EF 6的迁移
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);

当我尝试运行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?

1 个答案:

答案 0 :(得分:0)

程序外部的SET ANSI_NULL和SET QUOTED_IDENTIFIER仅影响会话的SQL Server行为(因此它不会写入存储过程,并且在运行存储过程时不会影响存储过程行为)。 /> 此外,SET ANSI_NULL ON是默认值(在SQMS上尝试SELECT GETANSINULL()),因此您可以省略它。您也可以省略SET QUOTED_IDENTIFIER ON(您使用[]来引用标识符,而不是")。
如果您需要在同一连接上运行更多语句,在Management Studio中使用GO,使用ADO可以将它们拆分为不同的执行方法(这样您最终会在正确的位置看到错误)。否则,您可以使用;(在这种情况下,您可能无法使用;)。