2016-03-23 2 views
1

У меня есть несколько таблиц с 30 + столбцами каждый, и я хотел бы легко получить имена столбцов, которые не допускают нулевые значения.Выберите имена столбцов, которые не могут быть нулевыми

Есть ли простой запрос, который может сделать это для таблицы?

Что-то вроде describe [table_name], но это только показывает необходимые столбцы, а не обязательно другую информацию о столбцах (например, тип), хотя это тоже может быть приятно.

ответ

3
USE [dbtest] 
GO 

CREATE TABLE dbo.[Event] 
(
    ID INT PRIMARY KEY, 
    Name VARCHAR(10) NULL 
) 
GO 

------------------------------------------------ 

USE [dbtest] --- !!! 
GO 

SELECT name 
FROM sys.columns 
WHERE [object_id] = OBJECT_ID('dbo.Event', 'U') 
    AND is_nullable = 0 

Выход -

name 
----------- 
ID 
+0

Это, кажется, что я ищу, возвращаясь 1 column 'name', который, как я предполагаю, будет содержать имена столбцов, но для меня это пусто. Он по-прежнему пуст при удалении предложения AND, поэтому что-то должно быть не так, поскольку в таблице есть определенные столбцы. Вот мой запрос: ВЫБРАТЬ имя FROM sys.columns WHERE [object_id] = OBJECT_ID ('dbname.dbo.Event', 'U') И is_nullable = 1 –

+1

Попробуйте непосредственно установить 'USE db' – Devart

+0

Просто примечание, вопрос состоял в том, чтобы показать столбцы, которые НЕ могут быть нулевыми, и в этом случае установите 'is_nullable = 0' –

1
SELECT * 
FROM INFORMATION_SCHEMA.columns 
WHERE table_name = 'test1' 
    AND is_nullable = 'no' 
1

использующие sys.tables и sys.columns виртуальные таблицы:

select T.name as [TableName], C.name As [ColumnName] 
from sys.columns c 
inner join sys.tables t 
    on t.object_id = c.object_id 
WHERE t.name = 'MyTable' AND c.is_nullable = 0 AND t.type = 'U' 
Смежные вопросы