Как делают Вы определяете, какие Таблицы SQL имеют столбец идентификационных данных программно

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

97
задан Cœur 23 March 2017 в 15:48
поделиться

6 ответов

Другой потенциальный способ сделать это для SQL Server, который имеет меньше уверенности в системных таблицах (которые подвержены изменениям, версия к версии) должно использовать представления INFORMATION_SCHEMA:

select COLUMN_NAME, TABLE_NAME
from INFORMATION_SCHEMA.COLUMNS
where COLUMNPROPERTY(object_id(TABLE_SCHEMA+'.'+TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1
order by TABLE_NAME 
167
ответ дан Mark Cidade 24 November 2019 в 05:22
поделиться

Я думаю, что это работает на SQL 2000:

SELECT 
    CASE WHEN C.autoval IS NOT NULL THEN
        'Identity'
    ELSE
        'Not Identity'
    AND
FROM
    sysobjects O
INNER JOIN
    syscolumns C
ON
    O.id = C.id
WHERE
    O.NAME = @TableName
AND
    C.NAME = @ColumnName
1
ответ дан Brian 24 November 2019 в 05:22
поделиться

Этот запрос, кажется, добивается цели:

SELECT 
    sys.objects.name AS table_name, 
    sys.columns.name AS column_name
FROM sys.columns JOIN sys.objects 
    ON sys.columns.object_id=sys.objects.object_id
WHERE 
    sys.columns.is_identity=1
    AND
    sys.objects.type in (N'U')
3
ответ дан Manrico Corazzi 24 November 2019 в 05:22
поделиться

В SQL 2005:

select object_name(object_id), name
from sys.columns
where is_identity = 1
6
ответ дан Euro Micelli 24 November 2019 в 05:22
поделиться

Иначе (на 2000 / 2005/2012/2014):

IF ((SELECT OBJECTPROPERTY( OBJECT_ID(N'table_name_here'), 'TableHasIdentity')) = 1)
    PRINT 'Yes'
ELSE
    PRINT 'No'

ПРИМЕЧАНИЕ: table_name_here должен быть schema.table, если схема не dbo.

27
ответ дан JotaBe 24 November 2019 в 05:22
поделиться

sys.columns.is_identity = 1

, например,

select o.name, c.name
from sys.objects o inner join sys.columns c on o.object_id = c.object_id
where c.is_identity = 1
48
ответ дан Kevin Crumley 24 November 2019 в 05:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: