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