Триггер для преобразования пустой строки в 'null', прежде чем она будет размещена в десятичном столбце SQL Server - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть передняя таблица, которая по существу соответствует нашей SSMS таблице базы данных t_myTable.Некоторые столбцы, с которыми у меня возникают проблемы, - это столбцы с цифровыми типами данных в БД.Они имеют разрешение null, но из внешнего интерфейса, когда пользователь удаляет числовое значение и пытается отправить пустое значение, он не публикуется в базе данных.Я подозреваю, что это значение отправляется обратно в виде пустой строки "", которая не переводится в допустимый тип данных null.

Можно ли создать триггер для преобразования этих пустых строк в null в insert и update в базу данных?Или, может быть, триггер уже произойдет слишком поздно в процессе, и вместо этого мне нужно обработать его в части front end или API?

Мы назовем мою таблицу t_myTable и столбец myNumericColumn.

Я тоже могу ошибаться, и, возможно, проблема с «пустой строкой» не является источником моей проблемы.Но я подозреваю, что это так.

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Как заметил @DaleBurrell, подходящее место для обработки данных находится на прикладном уровне.Вы можете заключить каждое из потенциально проблемных значений в функцию NULLIF, которая преобразует значение в NULL, если ему передается пустая строка.

Синтаксис будет выглядеть следующим образом:

SELECT
  ...
  ,NULLIF(ColumnName, '') AS ColumnName
0 голосов
/ 17 декабря 2018

SQL Server не позволяет преобразовывать пустую строку в числовой тип данных.Следовательно, триггер в этом случае бесполезен, даже INSTEAD OF 1. SQL Server проверит преобразование перед вставкой.

SELECT CAST('' AS numeric(18,2)) -- Error converting data type varchar to numeric
CREATE TABLE tab1 (col1 numeric(18,2) NULL);
INSERT INTO tab1 (col1) VALUES(''); -- Error converting data type varchar to numeric

Поскольку вы не упомянули эту ошибку, клиент должен передать что-то отличное от ''.Проблема может быть найдена с помощью SQL Profiler: вам нужно запустить его и посмотреть, какой именно оператор SQL выполняется для вставки данных в таблицу.

0 голосов
/ 11 декабря 2018

select nullif(Column1, '') from tablename

...