我有一個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可以使用批分隔符,但是如果你想返回結果,你的批處理分隔符運氣不佳 –