Я хочу узнать, есть ли столбец идентификатора или нет. Стол мне неизвестен. Я не сделал структуру таблицы. Использование запроса?Как определить, есть ли столбец идентификатора таблицы
Я использую Sql Server Compact Edition.
Я хочу узнать, есть ли столбец идентификатора или нет. Стол мне неизвестен. Я не сделал структуру таблицы. Использование запроса?Как определить, есть ли столбец идентификатора таблицы
Я использую Sql Server Compact Edition.
Это запрос, который возвращает имя столбца идентификатора;
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
), тогда таблица имеет столбец идентификатора, если он установлен. Если нет, то он не имеет столбца идентификатора.
пожалуйста Можете ли вы уточнить этот вопрос? Спасибо u – Shiny
check th answer now –
Один из способов сделать это - использовать хранимую процедуру sp_help
. I.e:
sp_help MyTable
Это вернет DataSet, который будет иметь всю необходимую информацию на столе. Существует конкретная таблица, в которой содержится информация об идентичности.
т.е:
Если он не содержит поле идентификатора, столбец идентификации будет сказать: «Нет столбца идентификации, определенного».
Добавлю, что вы можете выделить имя таблицы, а затем использовать комбинацию клавиш ALT + F1 как сокращение для этого, когда в SSMS. –
@Pranay: он сказал, что Compact Edition. Хранимые процедуры не поддерживаются, и нет никакого sys.anything.
Это вызов:
SELECT Count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE AUTOINC_INCREMENT IS NOT NULL AND TABLE_NAME='this_table'
Она возвращает либо 1 (истина) или 0 (ложь).
не работает для меня - нет колонки "AUTO_INC_INCREMENT" –
У вас есть дополнительное подчеркивание – Patrick
Любой из приведенных ниже запросов можно использовать для проверки, если Идентичность столбца присутствует в таблице
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'
)
Я знаю, что это долгое время назад, но я нашел это полезным
попробуйте следующее:
IF EXISTS (SELECT * from syscolumns where id = Object_ID(@TABLE_NAME) and colstat & 1 = 1)
BEGIN
-- Do your things
END
Это запрос, который получит и все 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
IF (OBJECTPROPERTY(OBJECT_ID('TABLE_NAME'), 'TableHasIdentity') = 1)
ObjectProperty
доступен начиная с SQL Server 2008 Кода: OBJECTPROPERTY
Я хотел бы добавить этот вариант, так как я думаю, что это самый простой
SELECT COLUMNPROPERTY(OBJECT_ID('TableName'),'ColumnName','isidentity')
Я согласен с @johnmcp. Эта опция действительно проста и возвращает 1, когда столбец является тождественным, и 0, когда столбец не является столбцом идентификации – Rajat
Не забудьте отметить ответ, как принять, если у вас есть информация, которую вы хотите –
См. Также [Как вы определяете, какие таблицы SQL имеют идентификационный столбец программно] (http://stackoverflow.com/q/87747) –