Update-Database 生成的脚本有语法错误,而正常的 Update-Database 可以正常工作
Script generated by Update-Database has syntax errors while a normal Update-Database works correctly
我有一个 .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' must be the first statement in a query
batch.
A RETURN statement with a return value cannot be used in this context.
为什么会出现这些错误? 如何解决它们?为什么正常的 update-database
可以正常工作,但 SQL 脚本有语法错误?
我认为adding 'GO' statements to Entity Framework migrations稍加修改就可以解决我的问题。
正如我们所知,如您所见SQL Server - Must be first statement in query batch - what and why?
来自http://msdn.microsoft.com/en-us/library/ms175502(v=sql.105).aspx
Rules for Using Batches
The following rules apply to using batches:
- CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE
SCHEMA, CREATE TRIGGER, and CREATE VIEW statements cannot be combined
with other statements in a batch. The CREATE statement must start the
batch. All other statements that follow in that batch will be
interpreted as part of the definition of the first CREATE statement.
- A table cannot be changed and then the new columns referenced in the
same batch.
- If an EXECUTE statement is the first statement in a batch,
the EXECUTE keyword is not required. The EXECUTE keyword is required
if the EXECUTE statement is not the first statement in the batch.
问题是当我们生成脚本而不是直接使用 Update-Database
时,所有迁移都希望在批处理中 运行 并且当我们有一些手工制作的 SQL 脚本时会导致一些错误在违反 SQL 规则的迁移中。
所以要解决这个问题,我们必须在语句的开头添加 /**/ GO
。 (感谢 Ivan Stus )
感谢Larnu帮我调查问题。
我有一个 .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' must be the first statement in a query batch.
A RETURN statement with a return value cannot be used in this context.
为什么会出现这些错误? 如何解决它们?为什么正常的 update-database
可以正常工作,但 SQL 脚本有语法错误?
我认为adding 'GO' statements to Entity Framework migrations稍加修改就可以解决我的问题。
正如我们所知,如您所见SQL Server - Must be first statement in query batch - what and why?
来自http://msdn.microsoft.com/en-us/library/ms175502(v=sql.105).aspx
Rules for Using Batches
The following rules apply to using batches:
- CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE SCHEMA, CREATE TRIGGER, and CREATE VIEW statements cannot be combined with other statements in a batch. The CREATE statement must start the batch. All other statements that follow in that batch will be interpreted as part of the definition of the first CREATE statement.
- A table cannot be changed and then the new columns referenced in the same batch.
- If an EXECUTE statement is the first statement in a batch, the EXECUTE keyword is not required. The EXECUTE keyword is required if the EXECUTE statement is not the first statement in the batch.
问题是当我们生成脚本而不是直接使用 Update-Database
时,所有迁移都希望在批处理中 运行 并且当我们有一些手工制作的 SQL 脚本时会导致一些错误在违反 SQL 规则的迁移中。
所以要解决这个问题,我们必须在语句的开头添加 /**/ GO
。 (感谢 Ivan Stus )
感谢Larnu帮我调查问题。