powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с запросом
2 сообщений из 2, страница 1 из 1
Помогите с запросом
    #32022329
Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу помощи! По необходимости пришлось заниматься БД.
Подскажите, как создать запрос или процедуру для такой задачи:
Имеется таблица AnalogHistory c полями DateTime, TagName, Value.
В поле DateTime (datetime) записано время, в TagName Tag1, Tag2,…,Tagn.(string) , в поле Value значения (real)
Необходимо создать новую таб. Tab1 с полями DateTime(datetime), Tag1(real), Tag2(real),…,Tag20(real). И перенести данные из AnalogHistory в Tab1
Новая таблица должна постоянно пополняться новыми данными.
БД находится на MSSQL 6.5
Благодарю за внимание!
...
Рейтинг: 0 / 0
Помогите с запросом
    #32022350
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Не совсем ясна задача. В AnalogHistory 20 записей, или надо взять первые 20, или надо переносить партиями по 20 записей.
2. Не рекомендуется использовать тип REAL. Он оставлен для совместимости и годится только для приближенных вычислений.
3. Не рекомендуется создавать таблицы с полями, несущими однотипную информацию. Никто не может сказать, что в дальнейшем этих полей будет достаточно или ни одно из них не будет лишним.
Существующая у Вас структура AnalogHistory методически правильная. Если в строках 1-20 всегда содержиться одни и те же значения, то это означает только то, что это поле лишнее. Вместо него надо сделать поле ID типа INT и, если содержание TagName имеют значения, то создать маленькую табличку -
ID Int, TagName varchar(n)

Лично я никогда не создам таблицу с полями:
Январь,Февраль,...,Декабрь. Неизвестно, может в следующем году будет реформа календаря и переход на 16-ти месячный год. Все в мире меняется, а программа должна работать! И никаких проблем 2000, 3000, 10567!


Создать таблицу легче вручную, но если уж хочется на автомате -
(самому написать CREATE TABLE наверное будет быстрее, чем текст этого запроса)

Этот запрос создает таблицу из 20 первых строк
Пользователь должен иметь разрешение на создание таблиц

declare @createtabe varchar(8000)
declare @i int

select @createtabe='Create table AHNew ( "DateTime" datetime,'

DECLARE AnalogHistory_Cursor CURSOR FOR
SELECT TagName FROM AnalogHistory INTO @TagName

OPEN AnalogHistory_Cursor
FETCH NEXT FROM AnalogHistory_Cursor INTO @TagName

select @createtabe=@createtabe+'"'+@TagName+'" real null,'
WHILE @@FETCH_STATUS = 0
BEGIN
select @createtabe=@createtabe+'"'+@TagName+'" real null,'
FETCH NEXT FROM AnalogHistory_Cursor
END
CLOSE AnalogHistory_Cursor
DEALLOCATE AnalogHistory_Cursor

select @createtabe=substring(@createtabe,DATALENGTH(@createtabe)-1))+')'

execute @createtabe
go
grant all on AHNew to public
go

Аналогично можно собрать запрос INSERT для вствки записей в новую таблицу, но писать его мне лень
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]