Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/20: Рейтинг темы: голосов - 20, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 27.12.2007
Сообщений: 22

О Raw Count в MS SQL 2000

08.01.2008, 10:20. Показов 3743. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вот прикольный на мой взгляд вопрос, как получить счетчик строк в отдельном столбце, типа:

RawCount | RecordID | RecordName
1 | 1 | FirstRec
2 | 7 | SecondRec
3 | 11 | NextRec
4 | 13 | AlsoRec
5 | 17 | OtherRec
6 | 18 | SmallRec
7 | 19 | BigRec
.....
естественно в таблице хранятся только (RecordID & RecordName)?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.01.2008, 10:20
Ответы с готовыми решениями:

Совместимость SQL 2000 и Windows 2000 (hebrew)
mne kazhetsa chto i win 2000(rus) est ta zhe problema: pri popitke sozdanija new table SQL server ne pozvolaet sozdavat fields,vibirat...

SQL 2000, Access 2000 и т.д.
На сегодняшний день просто очень актуальных для меня вопроса: 1. Имеется поле ФИО, соответственно 'Фамилия Имя Отчество' (разделяются...

Access 2000 + SQL 2000
Кто нибудь знает, почему access 2000 не коннектится к ms sql 2000? что надо сделать, чтоб заработало? (sp1 к access 2000 не помог), ...

21
0 / 0 / 1
Регистрация: 23.10.2007
Сообщений: 68
09.01.2008, 13:03
IMHO, надо пользовать процедурные расширения SQL-я
(не знаю, как это MS SQL Server-е называется):
пишем ф-цию, инкрементирующею, переменную,
ф-цию вставдяем в SQL-запрос.
0
0 / 0 / 0
Регистрация: 27.12.2007
Сообщений: 22
09.01.2008, 13:58  [ТС]
пробовалось,
но в функцию видимо идет передача значения переменной, а не ссылки на
переменную из запроса, поэтому невозможно изменить значение переменной запроса.
0
3 / 3 / 1
Регистрация: 06.11.2007
Сообщений: 75
09.01.2008, 15:35
Напр., создать темповую таблицу, в которую закачать инфо с помощью курсора из исходной таблицы. С одним селектом это сделать невозможно, т.к. возвращаемые данные селектом всегда трактуются как одно целое (множество), а в множествах невозможны операции над отдельными эл-тами.
0
0 / 0 / 1
Регистрация: 23.10.2007
Сообщений: 68
09.01.2008, 15:58
Я с SQL-сервером не знаком, работаю с Oracle.
В Oracle для каждой таблицы сущ. вычисляемый
псевдостолбец rownum. Из него можно вытащить № записи.
В SQL-сервере ,возможно, есть что-то подобное.

По поводу инкрементирующей ф-ции:
1)можно передавать переменную in out параметром,
приращать ее, и ее же возвращать.
(правда могут возникнуть проблемы с ограничениями на
параметры ф-ции, исп. в select-е. В PL/SQL
не прокатило. Возможно SQL-сервер будет не таким
щепетильным);

2) обьявить переменную глобально и написать ф-цию по
ее приращению и возврату.
0
3 / 3 / 1
Регистрация: 06.11.2007
Сообщений: 75
09.01.2008, 16:14
Секундочку...
Ты хочешь сказать, что если написать ф-цию, кот. инкрементируется с каждым вызовом и использовать запрос типа:

select func(), field1, field2,... from Table

то в результате получиться:

1 <знач> <знач>
2 <знач> <знач>
...

По моему получиться:

1 <знач> <знач>
1 <знач> <знач>
...

в таком select`е функция будет вызвана 1 раз.

Или я что-то не понимаю.
0
0 / 0 / 1
Регистрация: 23.10.2007
Сообщений: 68
09.01.2008, 16:52
To johnr
Поясняю свою мысль:

function Inc(Val in out number, IncBy in number)
return number as
begin
Val:=Val+ IncBy;
return Val;
end;
-----------------------------

v number;
v:=0;
select inc(v,1) RowNumber, MyField1, MyField2.......
from MyTable;

Т.к. параметр Val явл. in out, то переданная
туда переменная v ,будет приращенна на IncBy и
вернется в ф-цию inc(v,1) уже в измененном состоянии:

1-я запись из выборки:
v=0
RowNumber=v+IncBy=1;
2-я запись из выборки:
v=1
RowNumber=v+IncBy=2
и т.д. Ф-ция Inc возвр. Val для возможности исп.
ее в select-е.
Однако если ф-ция исп. в select-е, то Oracle
накладывает на нее ограничение: параметр ф-ции может быть
либо in, либо out. Ограничение, IMHO, весьма странное.
Вполне возможно, что приведенная выше схема будет работать
на других СУБД.
0
98 / 1 / 1
Регистрация: 28.01.2007
Сообщений: 53
09.01.2008, 17:21
Если таблицу называть MyTable
То для MS SQL это будет выглядеть так:
T-SQL
1
2
Select RecordID, RecordName, (Select Count(*) From MyTable MT
Where MT.RecordID < MyTable.RecordID) As RecordCount From MyTable
0
3 / 3 / 1
Регистрация: 06.11.2007
Сообщений: 75
09.01.2008, 17:28
Это будет правильно работать только при условии, что все RecordID разные.
0
0 / 0 / 1
Регистрация: 23.10.2007
Сообщений: 68
09.01.2008, 17:37
To VbGuest:
а) нумерация будет начинаться с нуля,
что есть неправильно;

б) если RecordID=null, то RecordCount=0;

в) IMHO, скорость выполнения подобного запроса
оставляет желать лучшего.
0
0 / 0 / 0
Регистрация: 27.12.2007
Сообщений: 22
09.01.2008, 17:48  [ТС]
to VbGuest:
работает, но ситуация осложняенся немного - если мы сортируем,
а очень намного при резком возрастании кол-ва строк. Но работает.

to xGrey:
функционал MS SQL даже 2000-го в отличии от Oracle 8i(9i) оставляет желать лучшего, а посему параметры не обьявляются как in или out,
и как я уже писал глобальная переменная из запроса в функцию передается по значению а не по ссылке то бишь инрементируя ее мы увеличиваем значение ее копии в памяти а необходимая нам переменная остается при своем же значении.

to johnr:
это одно из очевидных решений, но время, просто когда записей десятки тысяч, то высокоуровневый SQL слишком будет долго возится как и в случае с представленным SQL query from VbGuest.

Так как я инициатор затеи по поиску решения, я хочу обьяснить, что
искомое решение представлялось мне в виде какой-нибудь системной
переменной наподобие Oracle-ого RowNum, но похоже MicroSoft не предоставляет такого решения в своих СУБД, а жаль.
0
3 / 3 / 1
Регистрация: 06.11.2007
Сообщений: 75
09.01.2008, 18:02
Я так понимаю, что используется рез-т этого запроса в приложении. Почему бы не реализовать изменение приходящего DataSet уже в приложении.
Это можно сделать более быстро, чем на SQL
0
0 / 0 / 0
Регистрация: 27.12.2007
Сообщений: 22
09.01.2008, 18:34  [ТС]
пока используем Recordset,
короче если быть еще более корректным, то
необходимо получить выборку из n элементов после m элемента
в отсортированной таблице,
опять же при имеющихся данных и очевидном решении (Recordset.PageSize & RecordSet.AbsolutePage) тратится 13 секунд для вывода этого списка,
далее был составлен не хитрый запрос с использованием set rowcount n или too n, который занимает всего 3 секунды, но список невозможно отсортировать.
Поэтому и возникла мысль а вдруг есть системная переменная как в Ora.
0
98 / 1 / 1
Регистрация: 28.01.2007
Сообщений: 53
09.01.2008, 19:45
Можно еще так:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
begin
    CREATE TABLE #t1 (
           RecordID             int,
           RecordName           varchar(64,
           RowCount             int IDENTITY(1,1))
 
    INSERT INTO #t1 (RecordID, RecordName)
    SELECT RecordID, RecordName
    FROM MyTable
    select * from #t1
    drop table #t1
end
будет быстрее.
0
0 / 0 / 1
Регистрация: 23.10.2007
Сообщений: 68
09.01.2008, 20:47
Я опять со свиным рылом (Oracle 8i)
в калашный ряд (MS SQL-Server 2000) )

Наверняка в SQL-Server-е имеется возможность генерить уникальные
значения (в Ora - sequenser - последовательность).
Нельзя ли создать/пересоздать подобный объект БД,
настроить его на генерацию целых чисел (нач. с 1 с шагом 1)
и использовать в select-е в качестве инкременты?

Должно работать шустро.
0
3 / 3 / 1
Регистрация: 06.11.2007
Сообщений: 75
10.01.2008, 09:56
to NikolayLosev:

Может быть это есть не лучшее решение, но:
Если таблица не слишком часто изменяется или нет особой необходимости сразу же после изменения получать в Select уже новые данные, то можно создать несколько дополнительных таблиц, которые будут играть роль RowNum для каждого из возможных order by. Перестраивать эти таблицы при каждом insert или update ненужно. Достаточно выполнять эти действия по расписанию (например). Или ввести глобальную переменную, которая играла бы роль флага. Флаг можно устанавливать в триггерах....
Вобщем вариантов много.
0
0 / 0 / 0
Регистрация: 15.03.2007
Сообщений: 40
26.01.2008, 10:36
sequense's в SQL нет, но есть инкрементальные переменные, где можно задать шаг
это менее гибко, чем в Oracle, но хотя бы кое-что
0
0 / 0 / 0
Регистрация: 27.12.2007
Сообщений: 22
27.01.2008, 09:39  [ТС]
to phwp:
это какие-такие?
0
0 / 0 / 0
Регистрация: 15.03.2007
Сообщений: 40
27.01.2008, 21:00
T-SQL
1
2
3
4
CREATE TABLE [aaa] (
    [a] [int] IDENTITY (1, 1) NOT NULL 
) ON [PRIMARY]
GO
0
weirdrabbit
09.02.2008, 16:45
можно сделать так:
T-SQL
1
2
3
SELECT IDENTITY(int, 1,1) AS ID_Num
INTO NewTable
FROM OldTable
но все равно через 1 таблицу придется все делать

можно еще создать таблицу с полем IDENTITY,
делать в нее SELECT, вынимать данные,
а потом через TRUNCATE обнулять таблицу и счетчик в ней
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.02.2008, 16:45
Помогаю со студенческими работами здесь

Rational rose + sql 2008 on windows 7 ultimate with sql 2000 (where you can't create a new table)
Ситуация: установлена windows 7, на ней установлено: 1) SQL 2000, в котором невозможно создавать таблицы (проблемы из-за ОС W7); 2)...

Перенос баз из Sql 2000 и 2005 в Sql 2012
Добрый день, возникла необходимость переехать на новый сервер SQL, но столкнулся с трудностями. Как правильно перетащить базу? ...

Как подключить SQL 2000 БД на SQL 2005
Здравствуйте у меня БД сделанный на SQL 2000 хотел подключить на SQL 2005 через Attach выдает следующую ошибку TITLE: Microsoft SQL...

Оптимизация sql-запроса с Count()
Добрый день! Имеется таблица Table1 --id int primary key identity(1,1) --UserIP varchar(15) - айпишники --PageURL varchar(500) урлы...

SQL запрос, Count из нескольких таблиц
Здравствуйте, помогите написать один запрос для следующих таблиц: Пусть есть таблица персонала: Таблица: Staff +----+--------+ ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru