У меня есть хранимая процедура, которую я использую для вставки данных из CSV.Сами данные представляют собой сочетание типов, некоторых тестов, некоторых дат и полей денег.Я должен гарантировать, что эти данные будут сохранены, даже если они неправильно отформатированы, поэтому я сохраняю их все в varchars.Позже, как только данные будут проверены и проверены, они будут перемещены в другую таблицу с правильными типами данных.
Когда я делаю вставку в первую таблицу, я хотел бы сделать проверку, которая устанавливает флаг (битовый столбец) в строке, если это требует внимания.Например, если в имени денежного числа есть буквы, мне нужно пометить эту строку и добавить имя столбца в дополнительное поле errormsg, которое у меня есть.Затем я могу использовать этот флаг, чтобы найти и выделить для пользователей в интерфейсе поля, которые они должны редактировать.
Параметры даты кажутся простыми, я могу просто использовать IF ISDATE(@mydate) = '0'
, чтобы проверить, можно ли преобразовать этот параметр из varchar в datetime.Но я не могу найти ISMONEY () или что-то, что отдаленно эквивалентно.
Кто-нибудь знает, как позвонить, чтобы проверить, можно ли законно конвертировать содержимое архива в деньги?
РЕДАКТИРОВАТЬ: Я еще не проверял, ночто вы думаете о функции, подобной этой ?:
CREATE FUNCTION CheckIsMoney
(
@chkCol varchar(512)
)
RETURNS bit
AS
BEGIN
-- Declare the return variable here
DECLARE @retVal bit
SET @chkCol = REPLACE(@chkCol, '$', '');
SET @chkCol = REPLACE(@chkCol, ',', '');
IF (ISNUMERIC(@chkCOl + 'e0') = '1')
SET @retVal = '1'
ELSE
SET @retVal = '0'
RETURN @retVal
END
GO
Обновление
Только что закончил тестировать приведенный выше код, и он работает!