
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
22.10.2002, 17:17:05
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
имется таблица Table(Id int primary key, ... CnageDT datetime) поле CnageDT автоматически обновляется getDate() Хочу реализовать обновление записи только в том случае если она с момента считывания никем не изменена - т.е. в процедуре Update существует условие обновления WHERE ID=@Id AND CnageDT=@daCnageDT где @daCnageDT - параметр типа datetime при считывании записи получаю значение CnageDT = "22-10-2002 15:59:39.327" при обновлении записи передаю это значение в параметр @daCnageDT и для контроля выдаю это значение назад из процедуры - обновление не происходит т.к. возвращенное значение выглядит так "22-10-2002 15:59:40.000" Помогите, кто может ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 17:19:00
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
=Хочу реализовать обновление записи только в том случае если она с момента считывания никем не изменена Используй тип TIMESTAMP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 17:20:39
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
но хочется также и иметь представление когда запись была изменена ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 17:23:26
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
Может быть Тип параметра TimeStamp ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 17:25:32
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
Используй тригер на обновление. А вообще нехорошо использовать в WHERE время+милисекунды, это дополнительный элемент нестабильности. Сегодня обновляется, завтра перестанет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 17:28:18
|
|||
|---|---|---|---|
|
|||
Новая версия вопроса |
|||
|
#18+
imho, когда считываешь запись, то считываешь во временную таблицу, с тем считанным значением и сравнивать надо... считаем. Код: plaintext что-то меняем. записываем обратно. Код: plaintext 1. 2. 3. или около того ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 17:30:52
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
да я б не использовал бы время+милисекунды дак эта процедура getdate() вставляет их и я уже обязан во WHERE указать оригинальное значение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 17:34:45
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
>imho, когда считываешь запись, то считываешь во >временную таблицу, с тем считанным значением и >сравнивать надо... >считаем. >select * into #tForEdit from Table >что-то меняем. >записываем обратно. >update Fld1= t.Fld1, Fld2= t.Fld2, ..., FldN= t.FldN >from #tForEdit t >where (ID = t.ID) and (CnageDT = t.CnageDT) >или около того не подходит - много требует ресурсов, куча пользователей, сессий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 17:39:40
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Помоему с датами лучше работать таким образом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 17:40:22
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
where DATEPART(d, field_date) = DATEPART(d, get_date()) and DATEPART(m, field_date) = DATEPART(m, get_date()) and DATEPART(y, field_date) = DATEPART(y, get_date()) па маему енто так наждо делать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 17:44:35
|
|||
|---|---|---|---|
|
|||
Новая версия вопроса |
|||
|
#18+
и так по-босяцки можно :) Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 17:58:38
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
получается что в MSSQL работать с типом DateTime практически невозможно работать - если я буду производить поиск записи созданной именно в заданный момент времени указанной даты - я просто запись не найду или если сделать условие интервалом (что есть криво) - получу кучу записей и уж потом я должен анализировать подходит ли запись близко к запросу или нет. Обидно - в других базах такого бардака нет - внутреннее представление форматов данных совпадает с внешним т.е. если в поле есть милисекунды - они видны и с ними можно нормально работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 18:05:36
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
22-10-2002 15:59:39.327 и 22-10-2002 15:59:40.000 таки разные даты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 18:07:01
|
|||
|---|---|---|---|
|
|||
Новая версия вопроса |
|||
|
#18+
Погодь! Я не понял что-то... база тут при чём? ты передаёшь параметр, а когда он доходит до SQL он уже каким-то образом округлён. так? Значит источник неприятностей в механизме передачи параметров, а это, наверное, не база, а делфи+АДО там или ещё какая-нибудь хрень. Как думаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 18:13:36
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
Нет, в процедуре есть параметр типа DateTime Input/Output в него я передаю значение с милисекундами и ничего не делая над этим параметром в процедуре получаю его назад уже округленным в процедуре самим сервером ЗЫ: вывод этого параметра специально делаю для проверки Re: Погодь! Я не понял что-то... база тут при чём? ты передаёшь параметр, а когда он доходит до SQL он уже каким-то образом округлён. так? Значит источник неприятностей в механизме передачи параметров, а это, наверное, не база, а делфи+АДО там или ещё какая-нибудь хрень. Как думаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 18:19:36
|
|||
|---|---|---|---|
|
|||
Новая версия вопроса |
|||
|
#18+
Всё-таки, почему ты решил, что "сервером"... Допустим, я передаю параметр в процедуру через TADOQuery.Parameters.ParamByName('daCnageDT').Value:= <время_с_миллисекундами> а в процедуре полученный параметр сразу возвращаю и он возвращается без миллисекунд, то я бы подумал ещё, кто округляет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 18:24:23
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
Не знаю у тебя там что-то неладно:( Счас спец.слабал тест процу - нормально,что передал,то и вернуло. Кусок процы покань,плз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 18:46:20
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
вот щас слабал тестовую процедуру CREATE PROCEDURE [dbo].[sa_Organizations_Update1] @iOrgID int, @daChangeDT nvarchar(100) AS SET NOCOUNT ON UPDATE [dbo].[Organizations] SET [ChangeDT] = getdate() WHERE [OrgID] = @iOrgID AND ChangeDT=CAST(@daChangeDT as datetime) GO передаю в нее второй параметр '2002-NOV-22 17:35:16.013' ругается что не может перевести в DateTime Че это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 18:49:06
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
а при попытке создать эту процедуру с параметром DateTime при запуске процедуры со значением '2002-NOV-22 17:35:16.013' вообще не срабатывает - сразу ругается на некорректное значение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 18:56:25
|
|||
|---|---|---|---|
|
|||
Новая версия вопроса |
|||
|
#18+
KAK?! KAK ты передаёшь параметр?!! Напиши плз кусок, где ты себе берёшь значение и где передаёшь параметр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 18:58:45
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
в Query Analyzere ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 19:05:53
|
|||
|---|---|---|---|
|
|||
Новая версия вопроса |
|||
|
#18+
CREATE PROCEDURE [dbo].[sa_Organizations_Update1] @iOrgID int, @daChangeDT datetime AS SET NOCOUNT ON UPDATE [dbo].[Organizations] SET [ChangeDT] = getdate() WHERE [OrgID] = @iOrgID AND ChangeDT=@daChangeDT) GO передаю в нее второй параметр QA: exec sa_Organizations_Update1 1, CAST('2002-11-22 17:35:16.013' as datetime) или просто select CAST('2002-11-22 17:35:16.013' as datetime) ----- работает сравни формат того, что ты передаёшь, как параметр с форматом select getDate(). Должны быть одинаковые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2002, 20:06:02
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
вот такой формат всегда работает.... не зависимо от ваших настроек.... 'YYYYMMDD HH:MM:SS:mmm' YYYY год MM месяц DD день HH часы MM минуты SS секунды sss микросекунды например '20021022 20:05:34:123' и еще.... можно использовать децимал или флоат или варбин...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.10.2002, 10:13:44
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
Меня уже кондражка хватает: я получаю DateTime из SQL работаю с ним в .NET и возвращаю его как DateTime в процедуру в SQL - и он зараза не понимает свой же формат. Это же маразм просто! такого же не должно быть. И еще - почему QA отображает милисекунды, а EM и .NET(без изврата) не отображают ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.10.2002, 10:34:19
|
|||
|---|---|---|---|
Новая версия вопроса |
|||
|
#18+
2 sp Вариант, гарантированно работающий правильно, хорошо справляющийся с нагрузкой (куча пользователей, сессий) и требующий мало ресурсов - это тот, который вначале предложил Luchkin Dmitry - с временной таблицой и полем TIMESTAMP Причём временную таблицу нужно использовать при редактировании набора записей, а для одной записи - просто передавать это поле в параметре, как вы делаете для datetime. Использование datetime и сравнение не решает задачи, т.к. два пользователя теоретически могут сделать обновление в одно время. Ну а передача datetime всегда правильная, если использовать фориат 'YYYYMMDD HH:MM:SS:mmm' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&tablet=1&tid=1819390]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
27ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 313ms |

| 0 / 0 |
