2016-08-30 2 views
-1

Я хочу добавить ограничение не null в существующий столбец в таблице. После выполнения операции слияния данных. Я хочу изменить таблицу, чтобы добавить ограничение не null. Тем не менее, я хочу сначала проверить существование ограничения NotNULL в противном случае на основе последовательности запуска скрипта. Файл будет вызывать ошибку. Так что должно быть так.Изменение столбца таблицы sqlserver для добавления ограничения «Не NULL»

Я хочу попробовать что-то вроде:

IF NOT EXISTs (Select.. ) 

BEGIN 

ALTER table .... 

END 
+0

http://stackoverflow.com/questions/2499332/how-to-check-if-a-constraint-exists-in-sql-server –

+0

решаются ли этот вопрос? Вам нужна дополнительная помощь? Пожалуйста, дайте мне один намек: если этот вопрос будет решен, было бы очень любезно с вами, отметьте приемочную проверку ниже счетчика голосов (лучшего) ответа. Это будет 1) отметить эту проблему как решение 2) облегчить для последователей, чтобы найти лучшее решение 3) платить очки для ответчика и 4) платить очки вам. Поскольку вы пересекли границу с 15 пунктами самостоятельно, вы - дополнительно - попросили проголосовать за взносы. Это SO-способ сказать спасибо. Счастливое кодирование! – Shnugo

ответ

0

Может быть, я не понимаю, это правильно, но нет необходимости проверять существования. Вы можете изменить стол таблицы на NOT NULL снова и снова - если хотите.

Попробуйте это:

CREATE TABLE Test(ID INT,SomeValue VARCHAR(100)); 
INSERT INTO Test VALUES(1,NULL),(2,'Value 2'),(NULL,'Value NULL'); 

--Ups, ID не должно быть NULL, но это выдает ошибку

--ALTER TABLE Test ALTER COLUMN ID INT NOT NULL; 

--First должны исправить отсутствующее значение

UPDATE Test SET ID=3 WHERE SomeValue='Value NULL'; 

- Ниже представлены работы

ALTER TABLE Test ALTER COLUMN ID INT NOT NULL; 

- Проблема не повторить это утверждение. Нет необходимости для проверки существования ...

ALTER TABLE Test ALTER COLUMN ID INT NOT NULL; 

--clean-Up

GO 
DROP TABLE Test; 
0

Вы можете использовать представление в sys имен для этой цели. Что-то вроде этого.

select c.name,t.name,c.is_nullable 
from sys.all_columns c 
inner join sys.tables t on c.object_id=t.object_id 
where t.name = 'MyTable' and c.name = 'myCol'; 

, а затем alter table ... alter column...

Смежные вопросы