我遇到了使用C#生成SQL查詢的問題。爲了解決問題,我讓執行查詢的按鈕也在窗體上的文本框中顯示查詢文本。有什麼令人困惑的是,當程序試圖執行查詢時,我得到一個錯誤,說「IF'附近有錯誤的語法」,但是如果我將查詢從文本框複製/粘貼到SSMS,它可以正常工作。語法錯誤,但複製/粘貼查詢文本在SSMS中工作
存儲查詢的變量是這樣的:
string myQuery = @"
SELECT DISTINCT filter.id_column INTO #temp1
FROM MasterDB.dbo.filter filter
LEFT JOIN ClientDB.dbo.codes codetable
ON filter.id_column=codetable.id_column
WHERE codetable.name IS NULL
DECLARE @code_id1 INT;
SET @code_id1 = (SELECT MAX(code_num) FROM ClientDB.dbo.codes)+1
EXEC('ALTER TABLE #temp1 ADD tempID INT IDENTITY(' + @code_id1 + ',1)')
GO
IF (SELECT COUNT(*) FROM #temp1)>0
BEGIN
DECLARE @code_id2 INT;
SET @code_id2 = (SELECT MAX(tempID) FROM #temp1)+1
UPDATE ClientDB.dbo.track
SET [email protected]_id2 WHERE [trackname]='account'
END";
的C#代碼與查詢文本填充文本框,然後運行查詢的樣子:
using (SqlConnection myConnection = new SqlConnection(HostConnStr))
using (SqlCommand myCommand = myConnection.CreateCommand())
{
myCommand.CommandText = myQuery;
this.textBox1.Text = myCommand.CommandText;
myConnection.Open();
try { myCommand.ExecuteNonQuery(); }
catch (SqlException s) { MessageBox.Show(s.ToString()); }
myConnection.Close();
}
有誰知道爲什麼查詢文本可以複製到SSMS並運行正常,但從C#執行時拋出SQL異常?我如何使查詢運行?
關於查詢設計的批評將值得讚賞,但我更關心的是簡單地獲取查詢來執行,因爲它執行我所需要的操作。
編輯:這可能是重複的(當'GO'出現問題時,我被'IF'附近的錯誤拋出,所以我的搜索方向錯誤了。但是,我仍然沒有確保類似問題中提供的答案可以工作,因爲我認爲將查詢拆分爲多個命令會失敗,因爲查詢的後面部分引用了前面部分中的臨時表(臨時表是否會在第一個命令完成?)。
的[執行大型SQL腳本(使用GO命令)](可能的複製http://stackoverflow.com/questions/40814/execute-a-large-sql-script-with- go-commands) – BWA