我执行 SQL 脚本来更改数据库架构。它看起来像这样:
using (var command = connection.CreateCommand())
{
command.CommandText = script;
command.ExecuteNonQuery();
}
此外,命令在事务中执行。
脚本如下所示:
Alter Table [TableName]
ADD [NewColumn] bigint NULL
Update [TableName]
SET [NewColumn] = (SELECT somevalue FROM anothertable)
我得到一个错误,因为NewColumn
不存在。它似乎在执行之前对其进行解析和验证。
当我在 Management Studio 中执行所有内容时,我可以GO
在语句之间放置,然后它就可以工作了。当我GO
输入脚本时,ADO.NET 抱怨('GO' 附近的语法不正确)。
我可以将脚本拆分为单独的脚本并在单独的命令中执行,这将很难处理。我可以在每个 上拆分它GO
,自己解析脚本。我只是认为应该有一个更好的解决方案,我不明白一些事情。应该如何执行这样的脚本?
根据约翰桑德斯的回答,如果有人感兴趣,我的实现:
List<string> lines = new List<string>();
while (!textStreamReader.EndOfStream)
{
string line = textStreamReader.ReadLine();
if (line.Trim().ToLower() == "go" || textStreamReader.EndOfStream)
{
ExecuteCommand(
string.Join(Environment.NewLine, lines.ToArray()));
lines.Clear();
}
else
{
lines.Add(line);
}
}