Сравнение времени сервера Coldfusion и времени сервера базы данных SQL (проблемы)

У меня есть проблема, когда мне нужно получать ответы от пользователей по электронной почте, SMS, через приложение и т. д., и каждый носитель имеет свое собственное серверное время. У меня возникают проблемы, когда это время отличается всего на 5-10 секунд.

Я использовал функцию ColFusion #now()#, но у меня были только эти проблемы. Я хотел бы, чтобы каждая среда ссылалась только на одно стандартное время. Лучшее, что я мог придумать, это база данных SQL, поскольку все они используют этот ресурс?

Я выполняю операторы обновления, подобные следующему:

    UPDATE
    WENS.dbo.SMS_MESSAGES 
    SET sms_reply = <cfqueryparam cfsqltype="cf_sql_varchar" value="#firstwordmessage#" />
    <cfif LEN(firstwordmessage) neq LEN(msg)>, sms_reply_notes = <cfqueryparam cfsqltype="cf_sql_varchar" value="#msg#" /></cfif>
    , sms_reply_time = <cfqueryparam cfsqltype="cf_sql_timestamp" value="#now()#">

Я хотел бы заменить #now()# какой-то функцией getdate().

Любая помощь в этом будет принята с благодарностью.

Большое спасибо!!!!


person Scott    schedule 11.07.2020    source источник
comment
А что именно мешает вам изменить запрос?   -  person SMor    schedule 11.07.2020
comment
Вообще говоря, вам следует избегать использования имен из трех частей, так как это добавляет дополнительный уровень усилий, если вам когда-либо понадобится поддерживать несколько сред. Гораздо лучше позволить соединению определять базу данных, в которой находятся ваши объекты.   -  person SMor    schedule 11.07.2020


Ответы (2)


SQL Server дает вам выбор для текущей даты и времени. Они описаны здесь:

https://docs.microsoft.com/en-us/sql/t-sql/functions/current-timestamp-transact-sql?view=sql-server-ver15

Я всегда предпочитал getdate(), потому что его было легче набирать.

person Dan Bracuk    schedule 11.07.2020
comment
Я считаю, что больше печатать — это анти-шаблон. Код, которого нет, вы не поддерживаете. Так что GETDATE() для меня очень большой плюс. Не говоря уже о том, что я могу запрограммировать триггер и настроить его автоматически. Без использования ColdFusion. - person James A Mohler; 11.07.2020
comment
ColdFusion уже участвует в двух других областях. - person Dan Bracuk; 11.07.2020
comment
Спасибо за ответ. Я действительно ценю это. Как бы я поместил это в запрос на обновление? Будет ли это просто #getdate()#? Спасибо - person Scott; 12.07.2020

Вместо передачи параметра запроса, основанного на времени сервера CF, просто вызовите функцию SQL Server GetDate().

UPDATE WENS.dbo.SMS_MESSAGES 
SET sms_reply = <cfqueryparam cfsqltype="cf_sql_varchar" value="#firstwordmessage#" />
    <cfif LEN(firstwordmessage) neq LEN(msg)>
        , sms_reply_notes = <cfqueryparam cfsqltype="cf_sql_varchar" value="#msg#" />
    </cfif>
    , sms_reply_time = GetDate()
person Dan Roberts    schedule 12.07.2020