Поле Sql time (7) не сохраняется в БД с узла js

Я использую пакет nodemssql для SQL Server Azure

Поле

время(7)

>   RecurrenceType.columns.add('StartTime', mssql.Time(7));
>   RecurrenceType.columns.add('EndTime', mssql.Time(7));

Значения

Start time : '01:01'

End time   : '13:01'

хранится в БД как:

StartTime           EndTime
00:00:00.0000000    00:00:00.0000000

Пожалуйста, предложите, как сохранить значение в поле time(7) с пакетом nodemssql с точным значением

Неверный поток протокола удаленного вызова процедур (RPC) входящего потока табличных данных (TDS). Табличный параметр 3 (""), строка 1, столбец 4: тип данных 0x29 имеет недопустимую длину данных или длину метаданных.


person Furqan Misarwala    schedule 07.06.2018    source источник
comment
Вы пытались запустить SQL Profiler, чтобы увидеть, что происходит во время выполнения?   -  person Evaldas Buinauskas    schedule 08.06.2018
comment
Да, я проверил профиль SQL, но выполнение не идет в профайлер. в профайлере не вижу   -  person Furqan Misarwala    schedule 08.06.2018


Ответы (1)


Фуркан,

Пока ваш столбец таблицы настроен как TIME (7), вы должны иметь возможность вставлять непосредственно в столбец любую строку времени с точностью до 9 включительно:

DECLARE @TimeString varchar(50) = '09:47:11.455651236'
DECLARE @TimeFormat AS time(7) = @TimeString
PRINT @TimeString
PRINT @TimeFormat

Это очевидно, если предоставленная строка находится в формате «hh:mi:ss.mmmmmmmmm». Если строка предоставляется в любом формате, отличном от этого, или превышает точность 9, вставка/обновление завершится ошибкой:

Сообщение 241, уровень 16, состояние 1, ошибка преобразования при преобразовании даты и/или времени из строки символов.

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

person LinkOps    schedule 07.06.2018
comment
Я изменил время (7) на время (0) и передал значение как «01:01:00», но получаю ошибку, поскольку данные для табличного параметра @RecurrenceType не соответствуют табличному типу параметра. Ошибка SQL Server: 8037, состояние: 80 - person Furqan Misarwala; 08.06.2018
comment
Furqan, Просто передайте время как varchar или строку, и SQL автоматически сделает преобразование в TIME в фоновом режиме. - person LinkOps; 08.06.2018
comment
LinkOps, я попробую, но у меня есть вопрос, почему тип времени не работает в качестве параметра? - person Furqan Misarwala; 08.06.2018
comment
Furqan, Из того, что я вижу здесь npmjs.com/package/mssql#data-types тип данных должен быть указан как sql.Time(7), а не mssql.Time(7) - person LinkOps; 08.06.2018
comment
var mssql = требуется (mssql); потому что я дал имя как mssql вместо const sql = require('mssql') - person Furqan Misarwala; 08.06.2018
comment
В таком случае я понятия не имею, почему это не работает. Я обычно использую asp.net С# и просто использую Time (7) напрямую, когда это необходимо. - person LinkOps; 08.06.2018