Как сделать счетчик в sql

Добавил пользователь Валентин П.
Обновлено: 10.09.2024

Счетчик в запросе
проблемма такая : нужно получить порядковые номера записей в запросе. то есть чтоб запрос сам.

Автоинкрементный счетчик
В общем такая вот штука: в sql server 2008 не могу понять как добавить запись в которой.

Триггер-счетчик
Есть таблица Участники и отдельная таблица Кол-во участников с int полем amount, которое выступает.

Модифицировать целочисленное поле в счетчик
Вообщем, есть интовое поле и нужно модифицировать его в интовый счетчик create database test .

Листинг 5.3. Синтаксис оператора SET IDENTITY_INSERT
SET IDENTITY_INSERT [[ .] .]
;

IDENTITY ( , )
Для подобного автоинкрементного столбца нельзя задавать значение по умолчанию
(предложение DEFAULT). Столбец с такой характеристикой должен иметь тип данных
TINYINT, SMALLINT, INT, BIGINT, DECIMAL или NUMERIC. Если ему задается тип данных
DECIMAL или NUMERIC, то количество дробных знаков должно быть указано нулевым.
Столбец типа IDENTITY может быть в таблице только один.

Счетчик в таблице неверно нумерует
Создал таблицу в MS sql server. столбец с ID нумерует без остановки, на пример идет нумерация.

Установить поле счетчик id (identity) на начальное значение .
Есть поле id decimal(18,0) identity(1,1) NOT NULL. После вставки записей счетчик увеличивается.

Завершить хранимую процедуру выдав ошибку не выполняя ROLLBACK/COMMIT (чтобы счетчик не изменялся)
Прошу помощи в следующем — есть процедура, которая выполняет INSERT. Но перед этим необходимо.

Как добавить счетчик (автоинкремент) в запрос

Ох. Уважаемый, сколько же писать о том что нужно дать более полную информацию.

Какую БД Вы используете.

в запрос типа select никак

Вот здесь по transact-SQL

В MySQL есть параметр AUTO_INCREMENT.

если конкретнее то вот

Извините, забыл. FireBird 2.0.
Где-то на этом форуме видел, вроде Охотник333 приводил пример, но найти, к сожалению, не могу =(

Вот два примера. Но прикрутить к себе пока не хватает мозгов.

1) через подзапрос во фразе SELECT:

select (
select count(1)
from t t2
where t1.name >= t2.name
) as rn,
name,
age
from t t1

2) через селф-джойн и группировку:

select count(1) as rn,
t1.name,
t1.age
from t t1
join t t2
on t1.name >= t2.name
group by t1.name, t1.age

если у вас не существует счётчика, то запросом типа select вы его не создадите.
Для этих целей существует запрос ALTER TABLE (о конструкции написано выше)

Функция count() Calculates the number of rows that satisfy a query’s search condition. Available in SQL,DSQL, and isql. Это немного не то что Вы хотите.

Это ссылка на документацию
Это ссылка на FAQ с ответом на ваш вопрос, хотя на мой взгляд как то коряво. Использование тригера для автовычисляемых полей это не выход

Мне кажется здесь возникло непонимание нужд автора. Насколько я понял речь не идет об автоинкрементном поле в таблице, а идет о нумерации строк в выборке. Т.е. генераторы тут не при чем.
Вариантов вижу несколько:
1. Использовать хранимую процедуру, и делать выборку из нее.
2. Исользовать запросы, которые вы привели, если их можно модифицировать под ваши нужды. Но ИМХО, самообъединение таблиц для получения номера строки не самый быстродейственный вариант.
3. Нумеровать строки непосредственно в клиентском приложении.

Данная тема базируется на предыдущих темах:

Поиск на других ресурсах:

Содержание

Условие задачи

База данных содержит одну таблицу с именем Source . Таблица Source содержит следующие поля:

В задаче нужно сделать поле ID_Source уникальным счетчиком. При добавлении новой записи в таблицу, значение поля должно увеличиваться на 1 (автоинкрементное поле), то есть быть уникальным.

Выполнение

Запустить на выполнение MS Visual Studio .

База данных содержит одну таблицу Source (рисунок 2), которая содержит поля в соответствии с условием задачи.

Рис. 1. База данных MyDataBase.mdf в окне Server Explorer

SQL Server таблица рисунок

Рис. 2. Таблица Source

В соответствии с условием задачи поле ID_Source может быть уникальным. Современные базы данных поддерживают уникальность полей. Это означает, что при добавлении новой записи в базу данных автоматически формируется новое уникальное значение. Как правило, при добавлении новой записи для целого типа новое уникальное значение увеличивается на 1 относительно предшествующего уникального значения (необязательно). Невозможно изменить вручную или программно значение записей поля, которое есть счетчиком (уникальным значением). Всю эту работу берет на себя система управления базами данных.

Чтобы установить поле ID_Source уникальным, нужно выполнить следующие действия:

SQL Server команда таблица

SQL Server свойство таблица

Рис. 4. Установление свойства Identity Column в значение ID_Source

После выполненных действий поле ID_Source будет автоматически генерировать уникальное целочисленное значение.

Теперь эту таблицу можно использовать в своих проектах.

3. Заполнение таблицы данными

После установлки в таблице поля ID_Source как уникального счетчика можно программно или вручную заполнять таблицу данными (записями).

Чтобы заполнить таблицу данными (записями) нужно выполнить следующие действия:

MS SQL Server: назначение автосчетчика полю уже существующей таблицы

Здраствуйте! У меня такая проблема - когда уже все таблицы были созданы, я поняла, что мне нужно назначить на одно из полей уже существующей таблицы тип автосчетчик (IDENTITY). Это поле уже имеет изначально необходимый тип int (integer). Везде в справочниках рассматриваются образцы, как создать такое поле при создании таблицы, но как назначить автосчетчик на существующую таблицу - нет.
У меня были варианты и SET DEFAULT и просто изменение типа. И не один вариант не работает - среда пишет:"Ошибка синтаксиса".

даже если в последний вариант добавляю TYPE все равно тот же эффект.
Как можно поставить счетчик(не удаляя таблицу)?


Сейчас мы будем рассказывать о том, как правильно назначить именно SQL-счетчик переменной…

Вот пример небольшого, но действующего кодика:

query.SQL.Add('select count(*) from table where field = :XXX');

while Query.Eof <> True do

Здесь имеено имеется ввиду само наличие компонентов под названиями TQuery , TTable , а также TStoredProc

Продолжая далее, делем обявление

property RecordCount: Longint;

А далее уже описание

Все делается по времени исполнения и еще также исключительно для чтения.

А вот это свойство по имени RecordCount делает четкое и необходимое определение самого количества записей, которые находятся именно в наборе надобных данных.

Количество само записей, который возвращаются спокойно зависеть может от особенностей сервера и вообще не зависит от рубежей диапазона, который Вы при желании будете задавать.

На этом мы будем заканчивать, если предположительно наша статья понравилась Вам, ждем Вас в будущем на нашем веб-сайте!

В первой части статьи мы опишем основные шаги по подключению счетчиков и настройке загрузки данных в базу мониторинга производительности. Если же Вам лень читать и Вы любите смотреть и слушать, то можно перейти к видео-уроку и посмотреть небольшой 5 минутный ролик по выполнению необходимой последовательности действий и повторить при необходимости. Все процедуры просты и максимально прозрачны. Поехали!

1. Подключим счетчики производительности сервера под ОС windows.

Вариантов включения счетчиков производительности достаточно много. Мы с вами рассмотрим самый простой и наглядный без скриптов и других компонентов и приложений.

а) Открываем командную строку и вводим "perfmon.msc".

б) Выбираем добавить и переходим на вкладку.

в) Добавляем счетчики согласно таблицы ниже.

г) В настройках указываем формат файла ".csv"

д) Можем запустить и получим уже входные данные. Но работать сбор данных будет до выхода из системы, о настройке регламентного задания см. п3.

Внимание! Пользователь под которым будут запускаться счетчики должен обладать необходимыми правами и входить в группу "Perfomance monitor group".

Таблицу с основными на наш взгляд счетчиками приведем таблицу в этой статье. Если нужно больше информации, то к вашим услугам всемирная сеть и возможно кто-то из комментаторов к статье приведет какие-либо предложения и факты.

2. Подключим счетчики производительности SQL сервера под ОС windows.

Если у вас SQL и службы 1С стоят на одном сервере, то вы можете совместить настройки логов в один проект или в общую папку.

Операции те же самые, что и в п.1. + добавляем таблицу для счетчиков SQL сервера.

Таблица счетчиков для SQL сервера (синонимы по русски иногда это нечто).

Показатель Группа Синоним Описание Значение
Table Lock Escalations/sec Access Methods Методы доступа\Укрупнений блокировок таблиц в секунду Количество раз, когда блокировки таблицы были укрупнены Стремящееся к 0
Page life expectancy Buffer Manager Диспетчер буфера\Время без ссылки для страницы расширения Количество секунд, в течение которых страница остается в буферном пуле без ссылок на нее Не менее 300 с
Buffer cache hit ratio Buffer Manager Диспетчер буфера\Коэффициент обращений к буферному кэшу Процент найденных в буферном пуле страниц, что исключило необходимость чтения с диска Стремящееся к 100%
Average Latch Wait Time (ms) Latches Latches\Среднее время ожидания кратковременной блокировки Среднее время ожидания (мс) для запросов кратковременной блокировки Стремящееся к 0 мс
Average Wait Time (ms) Locks Locks\Время ожидания блокировки (мс) Среднее время ожидания (в миллисекундах) для всех ждавших запросов блокировки Стремящееся к 0 мс
Lock Waits/sec Locks Locks\Запросов блокировок в секунду Количество запросов блокировки, которые не были выполнены немедленно и ожидали предоставления блокировки Стремящееся к 0
Lock Timeouts/sec Locks Locks\Превышений времени ожидания блокировки в секунду Количество запросов блокировки, время ожидания которых истекло, включая запросы блокировок NOWAIT. Стремящееся к 0
Number of Deadlocks/sec Locks Locks\Количество взаимоблокировок в секунду Количество запросов блокировки, приведших к взаимоблокировкам Стремящееся к 0
Cache Hit Ratio Plan Cache Plan Cache\Коэффициент попадания в кэш Соотношение между попаданиями в кэш и обращениями к кэшу Стремящееся к 100%
Longest Transaction Running Time Transactions Transactions\Время выполнения самой длинной транзакции Наиболее продолжительное время выполнения какой-либо транзакции в секундах Для OLTP систем не должно быть высоким
Transactions Transactions Transactions\Транзакции Общее количество активных транзакций.

3. Настроим планировщик заданий для автоматического запуска счетчиков.

а) Открываем командную строку и вводим "taskschd.msc"

б) Переходим по следующему пути: "Microsoft\Windows\PLA"

в) Добавляем задание. Указываем способ запуска "при старте системы", запускать при ошибках и сохраняем.

4. Добавим задание загрузки данных в базу мониторинга.

а) Открываем базу мониторинга производительности

б) Переходим в подсистему "Анализ ТЖ" и открываем журнал "Замеры"

в) Добавляем новый замер и указываем:
- путь к каталогу с логами счетчиков;
- тип "Perfomance monitor";
- загружать online и время работы регламентного задания;
- можем указать имя сервера - реквизит оборудование.

г) все готово и первые замеры скоро появятся в базе.


5. Анализируем результат операций.

Теперь просмотреть данные можно в журнале "События замера" в форме таблицы или графически АРМ "Графики Perfomance monitor".



Видео-урок.

В этом видео-уроке мы с вами проведем необходимые настройки и посмотрим результаты на примере искусственных ситуаций.

Читайте также: