我执行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);
}
}