【发布时间】:2021-05-07 13:41:43
【问题描述】:
我有一个 .NET Framework 4.8 项目,它使用 Entity Framework 6.2.0 并进行了多次迁移。我的问题是,当我从本地计算机中删除我的数据库并运行 Update-Database 时,数据库已成功创建,但是当我运行 Update-Database -Script 命令并保存我的 SQL 脚本然后运行 SQL 脚本时使用
Invoke-Sqlcmd -InputFile ".\build\artifacts\migration.sql" -ServerInstance "(localdb)\MSSQLLocalDB"
我遇到很多语法错误,例如
Invoke-Sqlcmd : 'CREATE/ALTER PROCEDURE' 必须是查询中的第一条语句 批处理。
在此上下文中不能使用具有返回值的 RETURN 语句。
为什么会出现这些错误? 如何我可以解决它们?为什么正常的update-database可以正常工作,但是SQL脚本有语法错误?
我认为adding 'GO' statements to Entity Framework migrations 进行一些修改可以解决我的问题。
【问题讨论】:
-
@Larnu 我的问题是这个脚本使用
Update-Database -Script自动生成,但是生成的脚本有很多语法错误。无法一一解决 -
sqlcmd很可能在脚本之前运行了一些语句,但没有开始新的批处理。最喜欢在脚本开头添加SET ANSI_NULLS ON;\r\nGO\r\nSET QUOTED_IDENTIFIER ON;\r\nGO\r\n(其中\r\n表示回车和换行符)将解决问题。如果没有.\build\artifacts\migration.sql的内容,很难提出更多建议。 -
好吧,我看了dba.stackexchange.com/a/34661 和stackoverflow.com/q/54765112/1539100,怎么说Update-Database 在脚本中添加GO?
标签: sql-server visual-studio entity-framework-6 entity-framework-migrations invoke-sqlcmd