2009-04-30 3 views
3

У меня есть существующая программа, развернутая там, где некоторые базы данных клиентов имеют поле, не равное нулю, в то время как другие имеют значение NULL. Мне нужно запустить патч, чтобы исправить базу данных, чтобы столбец был нулевым, но не нужно запускать его во всех базах данных, только в тех, где он неверен. Есть ли простой метод, который можно использовать в SQL Server для выполнения этой проверки? Предпочтительно, что-то, что может быть запущено как часть сценария SQL.Как определить, установлено ли поле не null?

ответ

10

Посмотрите в INFORMATION_SCHEMA просмотров. Например:

SELECT 
    IS_NULLABLE 
FROM 
    My_DB.INFORMATION_SCHEMA.COLUMNS 
WHERE 
    TABLE_SCHEMA = 'dbo' AND 
    TABLE_NAME = 'My_Table' AND 
    COLUMN_NAME = 'My_Column' 

IS_NULLABLE будет либо «ДА», либо «НЕТ».

2
select Table_Name, Column_Name, Is_Nullable 
from information_schema.columns 

вы получите эту информацию

+0

Можете ли вы прокомментировать, почему information_schema.columns лучше, чем syscolumns. Я честно не знаю, не против. –

+2

Абсолютно, я бы сказал, где можно их использовать, представления схемы предпочтительнее, потому что 1. Они менее восприимчивы к изменению, чем системные таблицы (например, sys.objects vs sysobjects) и 2. Они имеют тенденцию аккумулировать информацию в системной таблице (например, ссылки на внешние ключи) – cmsjr

+0

Отлично, спасибо. –

2
select isnullable from syscolumns where name = 'status' 
+1

Этот запрос должен иметь дополнительные элементы where, как если бы у вас было несколько таблиц со статусом, вы получите несколько результатов. –

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