suneel kumar gupta Ответов: 1

Проверьте данные из хранимой процедуры и вставьте запись в таблицу.


У меня есть некоторая таблица данных как показано ниже таблица an я хочу проверить данные столбцов каждой строки
Внутри курсора .
Если данные столбца не являются допустимыми в качестве проверки, определенной в таблице проверки, то войдите в эту запись в таблицу недопустимых данных с соответствующим идентификатором проверки.


Data Table	 	 	 	 	 
					
Id	col1	Col2	Col3	Col4	Col5
1	ABC	NULL	2	null	email@gmail.com

2	XYZ	ad	4	8987987978	email@gmail.com

3	PQR	sadas	5	8987987978	email@gmail.com

4	ASD	ccd	0	12212	sasasdsad





Validation Table	 
ValidationId	ValidationDesc
1	col1 cannot be null or cannot be greater than 20 Character.
2	col2 cannot be null or cannot be greater than 50 Character.
3	col3 should be greater than 0.
4	col4  cannot be empty or cannot be greater than 10 character.
5	col5 cannot be null and greater than 50 character.




If Any Column data id invalid then insert those data into below table with corresponding validation id.

Invalid Data Table 		
Id 	DataTableId	ValidationId
1	1	2
2	1	4


Что я уже пробовал:

Изменить процедуру проверки данных
(
@ID INT,
@Errormessage VARCHAR(MAX) выход
)

-- Написать Курсор
внутренний курсор

проверка данных столбца, если он является не действительным затем вернуться validationId

вставить данные в таблице неверные сведения с кодом проверки

W∴ Balboos, GHB

Это целая цепочка событий, которые вы хотите реализовать в процедуре магазина. Из вашего "Что я пробовал:", ответ, по - видимому, - ничего.

1 Ответов

Рейтинг:
10

#realJSOP

Использование курсора неэффективно. Просто сделайте это таким образом и получите все недопустимые столбцы в одной строке:

INSERT INTO InvalidValidDataTable
(
    id,
    Col1IsValid,
    Col2IsValid,
    Col3IsValid,
    Col4IsValid,
    Col5IsValid
)
SELECT
       CASE WHEN col1 IS NULL OR LEN(col1) > 10 THEN 0 ELSE 1 END as Col1IsValid,
       CASE WHEN col2 IS NULL OR LEN(col2) > 50 THEN 0 ELSE 1 END as Col2IsValid,
       CASE WHEN col3 IS NULL OR col3 <= 0      THEN 0 ELSE 1 END as Col3IsValid,
       CASE WHEN col4 IS NULL OR LEN(col4) < 1 OR LEN(col4) > 10 THEN 0 ELSE 1 END as Col4IsValid,
       CASE WHEN col5 IS NULL OR LEN(col5) > 50 THEN 0 ELSE 1 END as Col5IsValid
FROM dbo.mytable


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

Наконец, если это домашнее задание, это плохой способ научить кого-то о курсорах, потому что это подразумевает, что дизайн схемы может быть запоздалой мыслью, потому что, ну, курсоры! Весь мыслительный процесс поврежден.