2013-03-28 107 views
2

我在使用SQL Server 2012數據庫的Visual Studio 2012中運行SSIS。使用OLE DB Source時出現下面的錯誤。此OLE DB源正在執行類似於下面所示的SQL。當我在最後刪除GO語句時,SSIS包執行正常。SSIS:「GO'附近的語法不正確。」錯誤

在SQL Server Management Studio中,無論GO語句是否存在,SQL都會正常執行。

在數據流任務中執行OLE DB源。

爲什麼GO在SSIS包內執行時會導致這個錯誤,應該怎麼辦?非常感謝。

錯誤:

[OLE DB Source from SQL variable [33]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E14. An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80040E14 Description: "Statement(s) could not be prepared.". An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80040E14 Description: "Incorrect syntax near 'GO'.".

SQL:

/* Test statement */ 
SELECT 'test' as N'test' 
GO 
+5

'GO'不是有效的TSQL關鍵字。它僅由諸如SSMS之類的客戶端工具用作批量分隔符。他們不會將'GO'發送給SQL Server本身。 –

回答

11

GO是分批終止,並用它在一個OLE DB源,作爲錯誤消息表示,不正確。

2

你的SQL是:

SELECT 'test' as N'test' 
GO 

GO是一個命令行的事情 - 通過SQL到使用OLE服務器時將其刪除。
儘量只此:

SELECT 'test' as N'test' 
+0

'N'是有效的語法,雖然在這種情況下並不真正需要,因爲別名只是使用ASCII字符。例如'選擇'Foo'作爲N'☂''可以正常工作。 –

+0

@MartinSmith好的謝謝(從答案中刪除)。我從來沒有使用MSSQL。乾杯。尼斯人物btw! – Bohemian

-2

建議的最佳實踐:使用分號作爲T-SQL語句terminator.Although不需要在這個版本的SQL Server的大多數語句的分號,它會在被要求未來的版本。

http://msdn.microsoft.com/en-us/library/ms177563.aspx 
+0

有人可以解釋這個建議有什麼問題嗎?在SSIS和其他地方的所有t-sql語句(以上鍊接)和所有與SQL Server相關的會議中都使用分號。 –

相關問題