BebeSaiyan Ответов: 1

Как закодировать вложенную инструкцию SQL, чтобы получить номер строки определенного элемента в mssql?


Я хотел знать, как получить номер строки конкретного элемента в mssql.

Допустим, у меня есть такой стол:

Код модель наименование тип
1-гитарой custom33
2 гитара Ibanez custom45
3-гитарой custom27
40 гитара Fender strat45
41 гитара Fender strat30
42 гитара Fender strat15

Например, я хочу получить предметы для Fender. Я хочу, чтобы таблица была такой сейчас(предполагая, что я использую оператор select, чтобы получить все элементы с брендом "Fender" в ней):

Код модель наименование тип
40 гитара Fender strat45
41 гитара Fender strat30
42 гитара Fender strat15

Тогда, например, я хочу получить номер строки марки "Fender" и модели "strat30". Возвращаемое значение должно быть равно 2. Если мне нужна модель "strat15", то номер строки должен быть 3 и наоборот.

Что я уже пробовал:

Возможно, мне понадобится вложить какой-то синтаксис sql, но я не знаю, как объединить оператор SELECT * FROM с оператором SELECT ROW_NUMBER. Надеюсь, вы, ребята, можете привести пример для этого.

Не стесняйтесь предлагать лучший способ достижения этого результата.

1 Ответов

Рейтинг:
0

OriginalGriff

Попробуй:

SELECT ROW_NUMBER() OVER (ORDER BY ID ASC) AS RowNumber, * FROM MyTable WHERE Brand='Fender'
Но вы не должны делать это так: иметь отдельные таблицы для бренда и типа, чтобы не дублировать информацию и использовать внешний ключ к ним вместо того, чтобы хранить один и тот же текст повторно.


BebeSaiyan

но что делать, если теперь я хочу сохранить результат кода в variabale с помощью asp.net? Я пробовал этот код: string query = string.Формат("выбрать *, функции row_number() над(приказ по ID), а рН от guitarItems где бренды, как '{0}'", наименование); кон.Open (); cmd.CommandText = query; Int32 count = (Int32)cmd.ExecuteScalar (); con.Close (); X = count;

OriginalGriff

1) Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
2) Execute scalar не может возвращать более одного значения! Вместо этого используйте DataReader или DataAdapter...

BebeSaiyan

но этот код дает мне исключение..
можете ли вы сохранить это значение в int32 count = (Int32)cmd.ExecuteScalar ();?

BebeSaiyan

но все, что мне нужно, - это только одно значение, как указано выше.

OriginalGriff

Затем вам нужно будет вложить этот запрос в секунду, который вернет номер строки на основе модели из запроса, который я вам дал.