SqlException:'GO'附近的语法错误

bdp*_*ish 15 sql-server-2008 dbcontext

我在使用DbContext发送SQL语句时遇到问题context.Database.ExecuteSqlCommand().

我正在努力执行

CREATE TABLE Phones([Id] [uniqueidentifier] NOT NULL PRIMARY KEY,
    [Number] [int],[PhoneTypeId] [int])
GO
ALTER TABLE [dbo].[Phones] ADD  CONSTRAINT [DF_Phones_Id]  
    DEFAULT (newid()) FOR [Id]
GO
Run Code Online (Sandbox Code Playgroud)

这与错误字符串失败

Incorrect syntax near the keyword 'ALTER'.
Incorrect syntax near 'GO'.
Run Code Online (Sandbox Code Playgroud)

但是,在SSMS中运行该确切语句运行时没有错误?我需要通过DbContext解决有关默认约束的任何问题.我看到人们使用约束而没有将IsDbGenerated设置为true的问题.我不知道这会如何适用于此.

Dav*_*kle 33

GO不是SQL的一部分,因此无法使用ExecuteSqlCommand()执行.将GO视为在使用Management Studio或命令行工具时分离批次的一种方法.相反,只需删除GO语句,你应该没事.如果由于需要在不同的批处理中运行命令而遇到错误,只需为要运行的每个批处理一次ExecuteSqlCommand().


V31*_*319 5

我知道, necroposting 是不好的方式,但可能这篇文章会节省某人的时间。正如 Dave 的帖子中提到的,GO 不是 SQL 的一部分,因此我们可以创建一些解决方法来使其工作

            var text = System.IO.File.ReadAllText("initialization.sql");
            var parts = text.Split(new string[] { "GO" }, System.StringSplitOptions.None);
            foreach (var part in parts) { context.Database.ExecuteSqlCommand(part); }

            context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您的命令将被拆分并毫无问题地执行