0

У меня возникла небольшая проблема с SQL. Это таблица Клиенты:SQL Server - добавление ограничения для существующей таблицы с использованием функции Alter Table

ID  Name  Address    Phone 
KP001 Bill  Jl Bali NO 27   81976524451 
KP002 Jane  Jl Sandang NO 5  81876537521 
KP003 Dion  Jl Kebon Jeruk NO 7 81684234913 

оригинальная структура таблицы Customer:

CREATE TABLE Customer 
(
ID char(5)primary key not null, 
Name varchar(20), 
Address varchar(30), 
Phone varchar(12), 
constraint cs2 check (LEN(ID)=5), 
constraint cs3 check (ID like 'KP[0-9][0-9][0-9]'), 
) 

и я хочу, чтобы изменить структуру таблицы с помощью Alter Table. Я хочу добавить ограничение в таблицу Клиенты, адреса которых после «нет» должны быть числом.

Во-первых, в Индонезии есть названия улиц с использованием номера «НЕТ» в качестве номера индикатора. И требуется таблица Customer после того, как «NO» - это номер. Я пытался с этим запросом:

ALTER TABLE Customers WITH NOCHECK 
ADD CONSTRAINT cs_address 
CHECK (CHARINDEX('no',Address)>1 AND 
ISNUMERIC (SUBSTRING (Address,7,2)) =1) 

Я знаю, что запрос неправильно, но вы можете мне помочь исправить ошибки и получить правильные результаты?

* извините, если мой английский не является хорошим

ответ

0

Если вы хотите, чтобы подтвердить адрес всегда начать с NO, с последующим числовым значением, то

ALTER TABLE Customers WITH NOCHECK 
ADD CONSTRAINT cs_address 
CHECK 
(
     CHARINDEX('no', Address) >= 1 
    AND ISNUMERIC(LTRIM(RTRIM 
       (SUBSTRING (Address, CHARINDEX('no', Address) + 2, 7)))) = 1 
) 
+0

Oh! Поэтому, если вы хотите разрешить адреса, содержащие «НЕТ», но не обязательно начинать с него, см. Обновленный ответ @cindy. – Vikdor

+0

Я просто попробовал этот запрос, но у меня возникла проблема. Если я вставляю значение «Jalan Jakarta NO 10», чем отображаемые сообщения: инструкция INSERT противоречит ограничению CHECK. Я думаю, это потому, что перед словом «НЕТ». Но я хочу, когда я вставляю значение «Jalan Jakarta NO 10», он должен быть выполнен – cindy

+0

извините, если я неправильно понял, но где я могу увидеть обновленный ответ? @vikdor – cindy