У меня возникла проблема с созданием SQL-запроса с использованием C#. Чтобы устранить неполадки, я сделал кнопку, которая выполняет запрос, также отображает текст запроса в текстовом поле в форме. Что вызывает недоумение, так это то, что я получаю сообщение об ошибке «Неправильный синтаксис рядом с« 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 и работать нормально, но генерирует исключение SQL при выполнении с C#? И как сделать запрос запущенным?
Критика по дизайну запроса будет оценена по достоинству, но я больше заинтересован в простом выполнении запроса, так как он делает то, что мне нужно, чтобы делать как есть.
EDIT: Это может быть дубликат (я был сброшен ошибкой, находящейся рядом с «IF», когда появляется сообщение «GO», поэтому мои поиски были в неправильном направлении. что ответы, предоставленные в похожих вопросах, будут работать, так как у меня создается впечатление, что разделение запроса на несколько команд завершится неудачно из-за более поздней части запроса, ссылающегося на временную таблицу в предыдущей части (временная таблица не будет недоступна после первая команда закончена?).
Возможный дубликат [Execute большой SQL скрипт (с командами GO)] (http://stackoverflow.com/questions/40814/execute-a-large-sql-script-with- go-commands) – BWA