#c# #sql-server
#c# #sql-сервер
Вопрос:
Я пытаюсь получить записи таблицы, удовлетворяющие некоторым условиям, но я получил
System.Data.SqlClient.SQLException
Сначала я создал объект DbCommand с именем ‘Command’.
var queryText = "CREATE VIEW T1 AS (SELECT SUM(TestTable.Id) AS [SUM TestTable.Id], TestTable.Name AS [TestTable.Name] FROM TestTable GROUP BY TestTable.Name );nCREATE VIEW T2 AS (SELECT [TestTable.Name] FROM (SELECT TestTable.Name AS [TestTable.Name], Row_Number() OVER(PARTITION BY TestTable.Name ORDER BY TestTable.Name) AS row_number FROM TestTable ) AS T WHERE T.row_number = 1);nSELECT T1.[TestTable.Name], [SUM TestTable.Id] FROM T1, T2 WHERE T1.[TestTable.Name] = T2.[TestTable.Name] ";
var Database.Connection.ConnectionString = "Data Source=SONDHE;Initial Catalog=Test;Persist Security Info=True;User ID=sa;Password=K1nh#bang#te#the;Application Name=EntityFrameworkMUE";
var command = Database.Connection.CreateCommand()
command.CommandText = queryText;
command.Connection = Database.Connection;
command.CommandTimeout = 180;
Затем я выполнил команду для получения записей:
using (var reader = command.ExecuteReader())
{
return reader.ToExpandoList();
}
но это выдает ошибку:
Неправильный синтаксис рядом с ключевым словом ‘CREATE’
Но я запустил этот запрос в SQL Server, и он успешно выполнен.
Это таблица TestTable
в базе данных Test
на сервере SQL. Я надеюсь, что кто-нибудь сможет мне объяснить. Спасибо!
Комментарии:
1. Запустите его дважды и увидите, как он взорвется!.
2. удалите бесполезный n между тремя командами. Для их разделения достаточно точки с запятой. Этот текст запроса считывается анализатором базы данных, ему не нужно размещать запросы в отдельных строках.
3. Вы никогда не должны смешивать DDL (подобный языку определения данных
CREATE VIEW
) с DML (подобным языку обработки данныхSELECT
) в одном операторе!4. Вам следует изучить намного больше и попробовать немного усерднее, прежде чем отправлять вопросы в StackOverflow. Это место не предназначено для замены самых базовых навыков разработки. Тем не менее, вы пытаетесь сделать много вещей в одном запросе. Вы пытались разделить их на 3 отдельные команды, каждая со своим собственным запросом? Запросы «Создать представление» должны выполняться с помощью command. Выполните Onquery() вместо command. ExecuteReader(). Я только не понизил ваш голос, потому что это ваш первый вопрос. Старайтесь усерднее.
5.
CREATE VIEW
должно быть единственным оператором в пакете. Вы не можете выполнить один пакет с несколькими операторами create view (или любыми другими операторами). Используйте отдельныеExecuteNonQuery
команды для каждого представления, а затемExecuteReader
дляSELECT
запроса.
Ответ №1:
Замените слова CREATE VIEW
словом WITH
и удалите точку с запятой