До появления спецификации 5-го издания метод Date.parse
был полностью зависимым от реализации (new Date(string)
эквивалентен Date.parse(string)
кроме последнего возвращает число, а не Date
). В спецификации 5-го издания было добавлено требование о поддержке упрощенного (и немного неправильного) ISO-8601 , но кроме этого было требование no для того, что Date.parse
/ new Date(string)
должны принять иное, чем то, что они должны были принять любой вывод Date # toString (не сказав, что это было).
Как и в ECMAScript 2017 (издание 8), реализации необходимо было проанализировать их вывод для Дата # toString и Дата # toUTCString , но формат этих строк не был указан.
Начиная с ECMAScript 2019 (версия 9) формат для Дата # toString и Дата # toUTCString указана как (соответственно):
предоставление еще 2 форматов, которые Date.parse должны корректно анализировать в новых реализациях (отмечая, что поддержка не является вездесущей и несовместимые реализации будут оставаться в использовании в течение некоторого времени).
Я бы рекомендовал, чтобы строки даты обрабатывались вручную, а конструктор даты Date использовался с аргументами года, месяца и дня, чтобы избежать двусмысленность:
// parse a date in yyyy-mm-dd format
function parseDate(input) {
var parts = input.split('-');
// new Date(year, month [, day [, hours[, minutes[, seconds[, ms]]]]])
return new Date(parts[0], parts[1]-1, parts[2]); // Note: months are 0-based
}
Несколько вещей: вы можете обработать первый раз через цикл, потому что имя не изменилось бы в первый раз. Вы можете захотеть обработать, когда @ColumnName имеет значение null, потому что это означает, что ваш запрос не возвратил строку, хотя ваш запрос ниже всегда должен возвращать значение.
DECLARE @ColumnCount INT
DECLARE @ColumnCounter INT
DECLARE @ColumnName NVARCHAR(max)
DECLARE @temp varchar(max)
SET @ColumnCounter = 0
SELECT @ColumnCount = Count(c.column_name)
FROM information_schema.columns c
WHERE c.table_name = 'Province'
WHILE @ColumnCount >= @ColumnCounter
BEGIN
SET @ColumnName = NULL
SELECT @ColumnName = c.column_name
FROM information_schema.columns c
WHERE c.table_name = 'Province'
AND c.ordinal_position = @ColumnCounter
IF ( @ColumnName != @temp )
BEGIN
--do something
END
SET @temp = @ColumnName
SET @ColumnCounter = @ColumnCounter + 1
END
для проверки столбца фактически обновляется после триггера обновления, вы можете использовать специальные таблицы deleted
и inserted
msdn , в которых триггерный код может находить старые и новые версии строк таблицы обновления
помните, что в каждой таблице можно найти более 1 строки. например, вы выполняете update table1 set col1 = value1 where some_condition
в триггерном количестве строк, влияющих на some_condition
, будут представлены в inserted
и deleted
таблицах
, чтобы узнать в триггере, в каких строках какой-то столбец является фактическим обновлением , вы можете присоединиться к вставленным и удаленным таблицам на каком-то первичном ключе и сравнить значения этого столбца
, функция update()
принимает в качестве имени столбца параметра не переменную sting с именем в качестве значения
например, используя update()
в триггерах, проверьте , этот update(some_column)
является истинным, когда some_column
присутствует в операторе update set
, даже значение столбца не изменяется.
похоже, что вы не можете написать универсальный триггер, чтобы подсчитать количество обновленных столбцов, если вам нужно это количество, вам нужно вручную записать триггер для каждой таблицы с чем-то вроде этого
declare @count int = 0
if update(col1) set @count = @count + 1
if update(col2) set @count = @count + 1
...
Columns_Updated()
. Имена столбцов не нужны.
– HABO
15 June 2018 в 20:05