2017-02-21 44 views
-1

Мне нужно создать процедуру, которая не позволяет вставлять повторяющиеся значения, а процедура должна проверять, имеет ли столбец «zipcode» допустимый формат (только 5 цифр)).sql server - Процедура, проверяющая, существуют ли значения строк из INSERT в базе данных

Я еще не нашел подходящего решения, и именно поэтому я пишу это.

Заранее благодарим за любую помощь!

EDIT: Я знаю об уникальных ограничениях, но я выполняю назначение для найма на работу, и я должен выполнить его с помощью процедуры.

Btw есть альтернатива в MS SQL для ключевого слова от MySQL? Мне нужно, чтобы делать то, что я хочу, я верю ...

+3

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

+0

Если вы задаете вопрос, считается лучшей практикой, чтобы показать нам, что вы пробовали, какие ошибки вы столкнулись и какие структуры таблиц у вас есть. –

+0

Я отредактировал мой вопрос. В любом случае, я знаю об уникальных ограничениях, но я выполняю назначение для найма на работу, и я должен реализовать его с помощью процедуры. Я не знаю, как получить значения из INSERT, чтобы проверить, нет ли там каких-либо .. Моя таблица довольно проста .. Например, CREATE TABLE (dataId int первичный ключ, имя varchar (20), фамилия varchar (20), zipcode varchar (6), city varchar (20), телефон varchar (20); – bkfloyd94

ответ

0

Привет для проверки вы можете использовать что-то вроде этого

ALTER TABLE your_table 
ADD CONSTRAINT chk_your_table CHECK (zipcode LIKE '[0-9][0-9][0-9][0-9][0-9]') 

для дубликата использования UNIQUE

+0

Спасибо за ответ, мне не разрешено использовать ограничения. Я должен реализовать его с помощью процедуры, вот в чем проблема. – bkfloyd94

0

Проблема с использованием хранимой процедуры является то, что если пользователь имеет разрешение UPDATE на столе они могут обойти вашу проверку и добавить недействительные и дублировать данные, поэтому вы должны использовать ограничение таблицы на столе, чтобы справиться с этим или триггером:

CREATE TABLE #Zip 
(
    [Id] INT PRIMARY KEY Identity, 
    [ZIPCode] VARCHAR(5) UNIQUE NOT NULL 
    CONSTRAINT CK_ZIPCode CHECK ([ZIPCode] LIKE '[0-9][0-9][0-9][0-9][0-9]'), 
    Place VARCHAR(20) NOT NULL 
) 

Теперь, если вы выполните следующие вставки:

Insert into #Zip VALUES ('12345', 'MyPlace') 
Insert into #Zip VALUES ('12345', 'MyPlace2') 
Insert into #Zip VALUES ('A2345', 'MyPlace3') 
Insert into #Zip VALUES ('13345', 'MyPlace4') 

Первый преуспевает, второй терпит неудачу с

Нарушение UNIQUE KEY ограничение

третий терпит неудачу с:

Заявление INSERT противоречило CHECK "CK_ZIPCode".

и 4-й успех.

Для проведения более сложных проверок следует использовать TRIGGER.

+0

Отредактировано мое сообщение. Дело в том, что я должен использовать процедуру. – bkfloyd94