Как определить, есть ли у таблицы идентификационный столбец - PullRequest
24 голосов
/ 20 мая 2010

Я хочу узнать, есть ли у таблицы столбец идентификаторов или нет. Стол мне неизвестен. Я не сделал структуру таблицы. Использование запроса?

Я использую Sql Server Compact Edition.

Ответы [ 9 ]

20 голосов
/ 20 мая 2010

Это запрос, который возвращает имя столбца идентификации;

create procedure GetIdentity 
@tablename varchar(50)
begin
    SELECT   OBJECT_NAME(OBJECT_ID) AS TABLENAME, 
             NAME AS COLUMNNAME, 
             SEED_VALUE, 
             INCREMENT_VALUE, 
             LAST_VALUE, 
             IS_NOT_FOR_REPLICATION 
    FROM     SYS.IDENTITY_COLUMNS 
    WHERE OBJECT_NAME(OBJECT_ID) = @tablename
end

Тогда сформируйте сторону кода.

Вызовите эту хранимую процедуру, используя роль администратора данных, затем отметьте datareader.hasrows(). Если значение условия истинно (1), то таблица имеет столбец идентификаторов, если он установлен. Если нет, то у него нет столбца идентификаторов.

12 голосов
/ 07 мая 2014

Я знаю, что это давно, но я нашел это полезным

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

IF EXISTS (SELECT * from syscolumns where id = Object_ID(@TABLE_NAME) and colstat & 1 = 1)
BEGIN
   -- Do your things
END
8 голосов
/ 20 сентября 2016
IF (OBJECTPROPERTY(OBJECT_ID('TABLE_NAME'), 'TableHasIdentity') = 1) 

ObjectProperty доступно, начиная с SQL Server 2008 OBJECTPROPERTY

8 голосов
/ 09 апреля 2013

Любой из приведенных ниже запросов можно использовать для проверки наличия столбца идентификации в таблице.

1)

SELECT *
FROM sys.identity_columns
WHERE OBJECT_NAME(object_id) = 'TableName'

2)

SELECT *
FROM sys.identity_columns
WHERE object_id = (
        SELECT id
        FROM sysobjects
        WHERE name = 'TableName'
    )
4 голосов
/ 14 декабря 2016

Я просто хотел бы добавить эту опцию, так как я думаю, что она самая простая

SELECT COLUMNPROPERTY(OBJECT_ID('TableName'),'ColumnName','isidentity')
3 голосов
/ 20 мая 2010

Один из способов сделать это - использовать хранимую процедуру sp_help.Т.е.:

sp_help MyTable

Это вернет DataSet, в котором есть вся необходимая информация на столе.Существует конкретная таблица, в которой есть информация об идентификаторах.

Т.е.:

Если она не содержит поле идентификатора, в столбце идентификаторов будет указано: «Столбец идентификации не определен».

2 голосов
/ 26 июля 2012

@ Pranay: он сказал, компактное издание. Хранимые процедуры не поддерживаются, и sys.anything отсутствует.

Это вызов:

SELECT Count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE AUTOINC_INCREMENT IS NOT NULL AND TABLE_NAME='this_table'

Возвращается либо 1 (true), либо 0 (false).

1 голос
/ 05 сентября 2014

Это запрос, который получает все имена таблиц, имена столбцов таблицы и is_identity или нет в выбранной базе данных.

SELECT
     sys.columns.name
   , sys.tables.name
   , is_identity
FROM sys.columns
INNER JOIN sys.tables ON sys.tables.object_id = sys.columns.object_id
    AND sys.columns.is_identity = 1
0 голосов
/ 05 июля 2019

Вы можете получить форму 1 или 0 Boolean , если текущая таблица имеет идентичные столбцы, используя эту

SELECT Count(Column_ID) FROM sys.identity_columns WHERE OBJECT_NAME(object_id) = 'tableName'
...