我有一个SQL脚本和GO
批处理分隔符,我尝试从C#代码执行。当我使用Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery
时,效果很好。不过,它发生在Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteReader
或Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteWithResults
。使用GO批处理分隔符和读取结果执行SQL脚本
System.AggregateException: One or more errors occurred. --->
Microsoft.SqlServer.Management.Common.ExecutionFailureException: An exception occurred while executing a Transact-SQL statement or batch. --->
System.Data.SqlClient.SqlException: Incorrect syntax near 'GO'.
这是一个非常简单的脚本,看起来像这样:
SELECT
DB_NAME()
AS
'Database Name';
GO
EXEC [schema].[MyStoredProcedure];
GO
SELECT
[Column]
AS
'Friendly Column Name'
FROM
[schema].[Table];
GO
我试图script.Replace("\n", "\r\n")
,我也得到了相同的结果。有谁知道我可以如何执行这样的脚本和获得结果吗?
GO不是实际的SQL语句。这是一些sql实用程序使用的批分隔符。看[这里](http://stackoverflow.com/questions/2299249/what-is-the-use-of-go-in-sql-server-management-studio)。所以基本上GO不是有效的SQL。您应该将所有这些查询,存储过程调用放在一个存储过程中 –
感谢您的回复@DustinHodges!请参阅[John Galloway的博客文章,题为“处理”GO“SQL脚本中的分隔符 - 简单的方法”](http://weblogs.asp.net/jongalloway//Handling-_2200_GO_2200_-Separators-in-SQL-Scripts-_2D00_简单的方法)了解更多关于SMO库如何帮助混淆你描述的问题。 –
检查了那个回应。关键是他正在使用ExecuteNonQuery,它不返回任何结果。正如你在你的问题中看到的那样,ExecuteNonQuery可以使用批分隔符,但是如果你想返回结果,你的批处理分隔符运气不佳 –