Поиск идентификатора столбца в таблице - PullRequest
3 голосов
/ 09 сентября 2011

При попытке выполнить оператор вставки я получаю следующую ошибку:

Msg 544, Level 16, State 1, Line 3 Cannot insert explicit value for identity column in table 'IV00101' when IDENTITY_INSERT is set to OFF.

Есть ли простой способ найти столбец идентификаторов, в который я пытаюсь вставить, который вызывает эту ошибку?

Проблема в том, что мой оператор вставки содержит 84 значения, в которые я вставляю.

Я использую Microsoft SQL 2008

Ответы [ 6 ]

5 голосов
/ 09 сентября 2011
SELECT name 
  FROM sys.columns 
  WHERE [object_id] = OBJECT_ID('dbo.IV00101') 
  AND is_identity = 1;
1 голос
/ 09 сентября 2011
select name 
from sys.identity_columns 
where [object_id] = object_id('your_table_here')
1 голос
/ 09 сентября 2011

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

SELECT c.name
FROM
    sys.columns c 
    JOIN sys.objects o  ON c.object_id = o.object_id
WHERE 
    o.name = 'TABLE_NAME'   -- replace with table nae 
    AND c.is_identity = 1
1 голос
/ 09 сентября 2011

Ваш вопрос немного неясен, но я попробую:

Звучит так, как будто столбец идентификаторов автоматически увеличивается, и вы пытаетесь вставить значение.

Вы можете использовать этот запрос, чтобы получить столбец идентификаторов для всех таблиц:

select TABLE_NAME + '.' + COLUMN_NAME, TABLE_NAME
from INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA = 'dbo'
and COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1
order by TABLE_NAME 
0 голосов
/ 09 сентября 2011

Вы пытаетесь переопределить идентификацию по умолчанию, для этого вам нужно добавить это вверху вашего запроса

SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }
0 голосов
/ 09 сентября 2011

Если ваша таблица имеет первичный ключ, столбец идентификаторов, вероятно, будет первичным ключом, как уже упоминалось в ответ Джеймса Джонсона .

Если это не так, вы можете просто разрешить SQLВ Server Management Studio создайте полный скрипт CREATE TABLE для таблицы и найдите в нем слово IDENTITY.

На мой взгляд, это самый простой и быстрый способ сделать это (и этого достаточно для одноразового действия).


РЕДАКТИРОВАТЬ:

@ Аарон Бертран:
Я знаю, что первичный ключ и идентификация - это две разные концепции.
Но, честно говоря: из всех таблиц с идентификационной колонкой, которые вы когда-либо видели, сколько вы видели, гдестолбец идентичности был не первичным ключом?
Вы говорите себе, что это обычная практика.

Итак, я говорю следующее:
Да, находяПервичный ключ в SSMS IMO проще, чем поиск столбца идентификации.
(честно: я не знаю лучшего способа найти столбец идентификации с использованием SSMS, поэтому я предложил способ, описанный выше)
-> если нахождение первичного ключа также означает нахождение личности в 95% всех случаев, почему бы не попробовать сначала использовать простой / быстрый способ (найти первичный ключ)?
Если первичный ключне столбец идентичности, вы все равно можете искать идентификаторВ столбце «время» используется «правильный» путь из вашего ответа (который, без сомнения, является правильным, но не так прост, как поиск первичного ключа в пользовательском интерфейсе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...