2010-05-20 6 views
15

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

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

+5

Не забудьте отметить ответ, как принять, если у вас есть информация, которую вы хотите –

+0

См. Также [Как вы определяете, какие таблицы SQL имеют идентификационный столбец программно] (http://stackoverflow.com/q/87747) –

ответ

14

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

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, затем отметьте datareader.hasrows(). Если значение условия истинно (1), тогда таблица имеет столбец идентификатора, если он установлен. Если нет, то он не имеет столбца идентификатора.

+0

пожалуйста Можете ли вы уточнить этот вопрос? Спасибо u – Shiny

+0

check th answer now –

3

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

sp_help MyTable 

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

т.е:

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

+0

Добавлю, что вы можете выделить имя таблицы, а затем использовать комбинацию клавиш ALT + F1 как сокращение для этого, когда в SSMS. –

2

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

Это вызов:

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

Она возвращает либо 1 (истина) или 0 (ложь).

+0

не работает для меня - нет колонки "AUTO_INC_INCREMENT" –

+0

У вас есть дополнительное подчеркивание – Patrick

6

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

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' 
    ) 
9

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

попробуйте следующее:

IF EXISTS (SELECT * from syscolumns where id = Object_ID(@TABLE_NAME) and colstat & 1 = 1) 
BEGIN 
    -- Do your things 
END 
1

Это запрос, который получит и все tableNames, columnnames таблицы и 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 
3
IF (OBJECTPROPERTY(OBJECT_ID('TABLE_NAME'), 'TableHasIdentity') = 1) 

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

4

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

SELECT COLUMNPROPERTY(OBJECT_ID('TableName'),'ColumnName','isidentity') 
+0

Я согласен с @johnmcp. Эта опция действительно проста и возвращает 1, когда столбец является тождественным, и 0, когда столбец не является столбцом идентификации – Rajat

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