WedX - журнал о программировании и компьютерных науках

Динамический SQL-запрос для выбора верхних (n) элементов

SELECT TOP 100 * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK)  ORDER BY LogTime DESC 

Я хочу найти строку «TOP 100» и заменить ее на «TOP 200» или любое другое значение.

Подскажите, пожалуйста, как это сделать на С#?

23.02.2015

  • Где ваш код С#? 23.02.2015
  • показать подробнее! например, эти строки сохраняются в текстовом файле? 23.02.2015

Ответы:


1

если вы пишете запрос в своем коде С#, вы можете использовать:

int topCount=1000;

string query= "SELECT TOP ("+i.toString()+") * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC" 

Но если вы хотите отправить параметр на свой SP, вы можете использовать:

Declare @i int=1000;

 SELECT TOP (@i) * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK)  ORDER BY LogTime DESC
23.02.2015
  • Это более разумный подход, чем взлом, который является принятым ответом. 23.02.2015

  • 2

    Мне кажется, что вы просто хотите заменить часть строки на другую, например:

    string sql = "SELECT TOP 100 * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK)  ORDER BY LogTime DESC";
    sql = sql.Replace("TOP 100", "TOP 200");
    

    Если число является динамическим и вы хотите заменить его другим, вы можете использовать регулярное выражение:

    string sql = "SELECT TOP 100 * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK)  ORDER BY LogTime DESC";
    string pattern = @"\bTOP\b *(\d+)";
    sql = Regex.Replace(sql, pattern, m => "TOP 200");
    
    23.02.2015
  • Спасибо! но это не всегда ТОП 100, это может быть ТОП 500 или что-то еще. Мне нужно найти значение TOP «что угодно» из строки, а затем заменить его на TOP «что угодно» 23.02.2015
  • @PrinceT: тогда используйте регулярное выражение. Я отредактировал свой ответ. Я не эксперт по регулярным выражениям, так что, возможно, это невозможно. Но вроде работает: regex101.com/r/kJ9zI7/1 23.02.2015
  • ладно..хорошо..супер!! 23.02.2015
  • Замена строки SQL — это хак. В этом случае в этом нет необходимости, см., например, ответ яшпала -1 23.02.2015
  • @Andomar: откуда ты знаешь источник строки OP? Может быть, он не может изменить ввод. Он не спрашивал, как параметризовать предложение TOP, а как изменить существующую sql-строку. 23.02.2015

  • 3

    вы хотите использовать функцию замены строки.функция замены строки< /а>

    23.02.2015

    4

    Если вы не используете хранимые процедуры, вы можете объединить ограничение в тексте команды в C#:

    int toplimit = 200;
    
    cmd.CommandText="SELECT TOP " + toplimit.ToString() + " * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK)  ORDER BY LogTime DESC";
    
    23.02.2015

    5

    Я думаю, что это должно быть так просто, как это

        private string GetSql(int maxRecords)
        {
            string statement = "SELECT TOP " + maxRecords + " FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK)  ORDER BY LogTime DESC ";
    
             return statement;
        }
    

    вы также можете изменить параметры и изменить свой SQL-запрос.

    23.02.2015

    6

    Я бы использовал регулярное выражение для этого. Потому что я думаю, что это лучший способ получить все варианты в одном выражении.

    string oldString = "Select top 500 from wherever";
    string newLimit = "top 20";
    string result = System.Text.RegularExpressions.Regex.Replace(oldString , "TOP (\\d)+",newLimit , System.Text.RegularExpressions.RegexOptions.IgnoreCase );
    

    Итак, введите свою старую строку, замените любую строку «TOP x» другой версией, указанной как newLimit в моем примере.

    23.02.2015

    7

    Для решения C# лучше использовать параметр, а не манипулировать строкой.

    просто так:

    int count = 200;
    var sql = string.Format("SELECT TOP {0} FROM [Rest_Of_Your_Query]", count);
    

    если вы будете использовать параметр, вам будет легче узнать, когда его нужно изменить (в случае, если вы хотите заменить только значение 100) и на какое значение (200, 300 и т. д.).

    Для решения SQL взгляните на ответ от @Ganesh_Devlekar

    23.02.2015

    8
  • Подскажите, пожалуйста, как это сделать на С#? 23.02.2015
  • @PrinceT, вы можете использовать sqlparameters. покажи свой код С# 23.02.2015
  • Этот синтаксис недействителен, попробуйте 23.02.2015
  • Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]