powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / заполняемый автоматически столбец
37 сообщений из 37, показаны все 2 страниц
заполняемый автоматически столбец
    #40001122
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу не пинать, sql только начал осваивать. Прошу направить. Есть БД - в 1 поле попадает по odbc дата формата datetime (около 5-20 записей в секунду приходит)
А для работы нужно только время, возможно ли сделать столбец для автоматического ОНЛАЙН заполнения значений типа Time, чтобы не конвертировать все это в коде на стороне клиента?
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001126
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в чем неудобство - приходит дата 1900-1-1 + время, т.е. часть даты не имеет смысла, но от нее не денешься.
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001129
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvazar1977
в чем неудобство - приходит дата 1900-1-1 + время, т.е. часть даты не имеет смысла, но от нее не денешься.
для чего это нужно ?
Просто отображать, на клиенте, время без даты ?
Если "да", то просто форматируй поле в запросе-источнике
Код: sql
1.
select format(getdate(), 'hh\:mm'), format(getdate(), 'HH\:mm')



пс
и, собственно, любой "уважающий себя" грид/текстбокс умеет это делать и сам ...
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001130
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет, не отображать, а "иметь", у меня сотни строк кода работают в access именно со временем. Мне в sql таблице нужно поле/столбец типа время, а есть только datetime или varchar - на выбор....и то и другое танцы с бубном в коде, учитывая что часть даты выглядит как 1900-1-1
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001131
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvazar1977
нет, не отображать, а "иметь", у меня сотни строк кода работают в access именно со временем. Мне в sql таблице нужно поле/столбец типа время.
"иметь", что бы что с ним делать ? :)
Ты его УЖЕ имеешь. 1900-1-1 - это "нулевая дата". Точка отсчета, т.с.
Просто не обращай на неё внимание и всё
Код: sql
1.
2.
3.
4.
select cast('19000101 10:00' as datetime) + cast('19000101 00:40' as datetime)

-----------------------
1900-01-01 10:40:00.000
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001133
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Вычисляемые столбец в таблице
Код: sql
1.
alter table ... add [только время] as cast([дата+время] as time)


2. Сделать представление и работать через него.
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001196
Агрох
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть тип данных time.
Почитай про триггеры - они, в том числе, используются для постобработки входящих данных и автоматического заполнения столбцов и даже других таблиц.

Ещё вариант, вообще убрать поле с датой в таблице и заполнять её через функцию, внутри которой входящая datetime будет преобразовываться в time.

Но и не забывай про аргументы комментаторов выше: попробуй подумать, насколько тебе действительно нужно хранить время отдельно от даты.
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001248
MaksK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CREATE TABLE [dbo].[Table_TEST](
[ID] [int] NULL,
[DATEZAPIS] [datetime] NULL,
[TIMEZAPIS] AS (CONVERT([time],[DATEZAPIS],(108)))
) ON [PRIMARY]

GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Table_TEST', @level2type=N'COLUMN',@level2name=N'DATEZAPIS'
GO
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001473
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю всех за советы, спасибо!! помогло.
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001476
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
рано радовался. вычисляемый столбец по умолчанию не имеет типа, поэтому access воспринимает его как строковое поле со всеми вытекающими.
Мне необходимо создать реальный столбец и триггером заполнять в него "время". Может кто пример привести?
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001477
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Агрох, нужно поле дата, без вариантов. можете привести пример триггера или функции?
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001479
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvazar1977
рано радовался. вычисляемый столбец по умолчанию не имеет типа, поэтому access воспринимает его как строковое поле со всеми вытекающими.
Чушь. В MSSQL не бывает полей без типа. Даже вычисляемых.
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001487
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич, этот сайт крайне дружественен с точки зрения вставки графической информации... лучше один раз увидеть. при выполнении этой строки
(alter table dbo.AllDeals add [TimeDeal] as cast([TimeTorg] as time)
создается столбец который пр просмотре design НЕ ИМЕЕТ значения в поле Data Type.
Когда такой столбец линкуется к access, естественно, по умолчанию данные в нем строковые.
Поэтому нужно видимо создать обычный столбец и тригером INSERT обновлять в нем значение этого поля
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001494
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvazar1977,
может стоит просто скопировать тип? :
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001495
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvazar1977,

Тип вашего вычисляемого поля можно узнать из sys.columns, information_schema.columns или выполнив sp_help 'имя таблицы'. Когда там найдете хоть одно поле, у которого нет типа, дайте знать.

З.Ы. А про вот эти графические редакторы -- "Не читайте советских газет до обеда" (с). Это баловство, ясельная группа детсада.
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001496
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот вам тоже картинок нарисую:
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001497
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvazar1977Когда такой столбец линкуется к access, естественно, по умолчанию данные в нем строковые.А вот как линковать в Access поля типа time чтобы было так, как вам хочется, спрашивать надо в разделе про Access .
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001511
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvazar1977
вычисляемый столбец по умолчанию не имеет типа, поэтому access воспринимает его как строковое поле со всеми вытекающими.
нее,
это Акс, просто, "не понимает" этих типов : ни Time, ни Date, ни DateTime2 - вообщем всех новых (после 2000 сервера) + bigint
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001895
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как я понял, мне остается только триггер.... просто бывают ситуации когда подгружаются быстро (10 сек) более, допустим, 400 000 записей, триггер сильно затормозит процесс?
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001898
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvazar1977
как я понял, мне остается только триггер.... просто бывают ситуации когда подгружаются быстро (10 сек) более, допустим, 400 000 записей, триггер сильно затормозит процесс?
Как триггер поможет начать аксесу понимать тип time?
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001905
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич
kvazar1977
как я понял, мне остается только триггер.... просто бывают ситуации когда подгружаются быстро (10 сек) более, допустим, 400 000 записей, триггер сильно затормозит процесс?
Как триггер поможет начать аксесу понимать тип time?


на стороне sql servera сделать поле datetime, преобразовывать имеющиеся данные времени типа 1/1/1900 20:05:05 в 29/09/2020 20:05:00, и этот формат на стороне акцесса уже обрабатывать в запросах. например, мне нужно сравнивать его со значением Now() в формате where between .. и ..


у меня есть данные из квика о времени сделки типа 1/1/1900 15:56:01
преобразую их в 23/09/2020 15:56:01 datatime и отдаю в акцесс в удобоваримом формате.
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40001911
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvazar1977
на стороне sql servera сделать поле datetime, преобразовывать имеющиеся данные времени типа 1/1/1900 20:05:05 в 29/09/2020 20:05:00, и этот формат на стороне акцесса уже обрабатывать в запросах. например, мне нужно сравнивать его со значением Now() в формате where between .. и ..
Мда.

Стоит задача: сравнить ахулион значений с одним значением now(). Но ахулион значений, как назло, имеет дату 1/1/1900, а now() содержит текущую и так просто не сравнить. Что же делать? Как же поступить правильному архитектору?

Правильно!

Настоящий архитектор преобразует ахулион значений к текущей дате, вместо того, чтобы в одном значении now() заменить дату на 1/1/1900 перед сравнением. Бинго!
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40002323
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич, не нужно ломать о меня копья, я ценю помощь, но я работаю с БД 25 лет, просто непрофессионально , но плотно. с sql пришло время, нет проблем разберусь, у меня шкафы книг, хотел быстро решить именно этот вопрос.

В базах access десятки запросов работают с полем время, и именно поэтому в этом поле должно быть Time, а на руках сейчас нулевая дата со временем из sql.

квик - sql - access. я уж молчу что квик отдает дату и время в виде строк, вот уже очевидное решение.
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40002329
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court, bigint понимает, я с ним работаю..
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40002332
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvazar1977
Гавриленко Сергей Алексеевич, не нужно ломать о меня копья, я ценю помощь, но я работаю с БД 25 лет, просто непрофессионально , но плотно. с sql пришло время, нет проблем разберусь, у меня шкафы книг, хотел быстро решить именно этот вопрос.
Я не ломаю. Но просто это же ... ну, логика банальная: одно значение менять или много.

kvazar1977В базах access десятки запросов работают с полем время, и именно поэтому в этом поле должно быть Time, а на руках сейчас нулевая дата со временем из sql.Раз есть какие-то запросы, которые хочется сохранить при миграции данных в SQL Server из аксеса, спрашивать, как делать, надо не здесь, а в соответствующем разделе .
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40002336
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сформулирую прямую просьбу

есть столбец sql, типа = 1/1/1900 23:45:45

как триггеру after insert привести значение в формат 24/09/2020 23:45:45, т. е. заменить нулевую дату на текущую?
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40002341
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через строку или через функции даты-времени.
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40002345
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич, можно ли конкретную инструкцию, смысл я понимаю
просто 1 строку изменения
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40002347
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvazar1977
Гавриленко Сергей Алексеевич, можно ли конкретную инструкцию, смысл я понимаю
просто 1 строку изменения


Код: sql
1.
2.
3.
4.
declare
    @from   datetime = '1/1/1900 23:45:45'

select [to] = dateadd( dd, datediff(dd, '19000101', getdate()), @from )



И да, в вашем случае нужен не after-триггер, а instead of.
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40002361
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
https://techarks.ru/qa/sql/trigger-dlya-obnovleniya-stolb-AW/

у меня почти тоже самое, но

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TRIGGER [dbo].[DealInsert]
ON [dbo].[AllDeals]
AFTER INSERT
AS 
BEGIN   
    SET NOCOUNT ON;
    -- update your table, using a set-based approach
    -- from the "Inserted" pseudo table which CAN and WILL
    -- contain multiple rows!
    UPDATE [dbo].[AllDeals] 
    SET  [DateTorg] = dateadd( dd, datediff(dd, '19000101', getdate()), i.TimeTorg ) 
    FROM Inserted i
    WHERE id = i.id
END
GO



но почему то не работает

Модератор: Вложение удалено.

Модератор: Тут был скриншот с подсветкой в синтаксисе приведенного триггера
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40002364
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имею сказать следующее:

1. Вы партизан. "Но почему то не работает" -- "догадайся, мол, сама" что бы это могло значить.
2. Вы делаете дохрена неэффективно и не слушаете, что вам советуют. В вашем решении записи сначала физически вставляются, потом еще и физически апдейтятся. Триггер instead of позволяет сразу вставить измененные значения.
3. Для человека, который хочет разобраться, вы сильно много игнорируете банальный синтаксис и примеры хелпа. Ваш запрос должен выглядеть примерно вот так:
Код: sql
1.
2.
3.
4.
    UPDATE a set
       a.[DateTorg] = dateadd( dd, datediff(dd, '19000101', getdate()), i.TimeTorg ) 
    FROM [dbo].[AllDeals] a
    inner join Inserted i on a.id = i.id
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40002365
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот так выполняется, только не понимаю, он должен постоянно выполняться или нет...

Модератор: Вложение удалено.

Модератор: Тут был скриншот про 32 секунды выполнения команды create trigger
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40002366
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvazar1977
вот так выполняется, только не понимаю, он должен постоянно выполняться или нет...
Нет, просто выполняется команда создания триггера, которая чего-то ждет. Например, sch-m на таблицу.
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40002371
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич, триггер создан
USE [db_algotrade]
GO
/****** Object: Trigger [dbo].[DealsInsert] Script Date: 24.09.2020 23:36:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- create a new trigger
ALTER TRIGGER [dbo].[DealsInsert]
ON [dbo].[AllDeals]
instead of insert
AS
BEGIN
SET NOCOUNT ON;
-- update your table, using a set-based approach
-- from the "Inserted" pseudo table which CAN and WILL
-- contain multiple rows!
UPDATE a set
a.[DateTorg] = dateadd( dd, datediff(dd, '19000101', getdate()), i.TimeTorg )
FROM [dbo].[AllDeals] a
inner join Inserted i on a.id = i.id
END

теперь когда включаю экспорт ODBC записи не приходят...
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40002372
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kvazar1977,

В триггере instead of insert надо делать insert, если вы хотите, чтобы записи вставились.
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40002437
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже до триггеров дошли... Жесть какая-то...
Код: sql
1.
alter table ... add TimeColumn as cast('1900' as datetime) + cast(cast(DateColumn as time) as datetime)
...
Рейтинг: 0 / 0
заполняемый автоматически столбец
    #40002738
kvazar1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
CREATE TRIGGER [dbo].[DealsInsert1]
ON [dbo].[AllDeals]
instead of insert
AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

INSERT INTO AllDeals(Num, Security, Price, Quantity, Operation, DateTorg)
SELECT Num, Security,Price, Quantity, Operation, CAST(getdate() AS datetime) + CAST(TimeTorg AS datetime)
FROM INSERTED
END
GO



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


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