Подтвердить что ты не робот

Обработка столбцов идентификации в инструкции "Вставить в таблицу значений()"?

В SQL Server 2000 или выше все равно обрабатывается столбец с автоматическим генерированием первичного ключа (идентификатор) при использовании оператора, подобного следующему?

Insert Into TableName Values(?, ?, ?)

Моя цель - НЕ использовать имена столбцов вообще.

4b9b3361

Ответ 1

По умолчанию, если у вас есть столбец идентификатора, вам не нужно указывать его в разделе VALUES. Если ваша таблица:

ID    NAME    ADDRESS

Затем вы можете сделать:

INSERT INTO MyTbl VALUES ('Joe', '123 State Street, Boston, MA')

Это автоматически сгенерирует идентификатор для вас, и вам не придется об этом думать вообще. Если вы SET IDENTITY_INSERT MyTbl ON, вы можете присвоить значение столбцу ID.

Ответ 2

Другой "трюк" для создания списка столбцов - это просто перетащить "Столбцы" node из Обозревателя объектов в окно запроса.

Ответ 3

Лучшей практикой является прямое перечисление столбцов:

Вставить в TableName (col1, col2, col2) Значения (?,?,?)

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

Ответ 4

У вас есть 2 варианта:

1) Либо укажите список имен столбцов (без столбца идентификации).

2) SET IDENTITY_INSERT tablename ON, за которым следуют инструкции вставки, которые содержат явные значения для столбца идентификации, а затем SET IDENTITY_INSERT tablename OFF.

Если вы избегаете списка имен столбцов, возможно, этот "трюк" может помочь?:

-- Get a comma separated list of a table column names
SELECT STUFF(
(SELECT 
',' + COLUMN_NAME AS [text()]
FROM 
INFORMATION_SCHEMA.COLUMNS
WHERE 
TABLE_NAME = 'TableName'
Order By Ordinal_position
FOR XML PATH('')
), 1,1, '')

Ответ 5

Так как нецелесообразно помещать код в комментарий, в ответ на ваш комментарий в Eric ответьте, что он не работает для вас...

Я просто запустил следующее в окне SQL 2005 (извините, без поддержки 2000) с настройками по умолчанию и работал без ошибок:

CREATE TABLE dbo.Test_Identity_Insert
(
    id  INT IDENTITY NOT NULL,
    my_string   VARCHAR(20) NOT NULL,
    CONSTRAINT PK_Test_Identity_Insert PRIMARY KEY CLUSTERED (id)
)
GO

INSERT INTO dbo.Test_Identity_Insert VALUES ('test')
GO

SELECT * FROM dbo.Test_Identity_Insert
GO

Возможно, вы отправите значение идентификатора в свой список значений? Я не думаю, что вы можете заставить его игнорировать столбец, если вы действительно передаете ему значение. Например, если ваша таблица имеет 6 столбцов и вы хотите игнорировать столбец IDENTITY, вы можете передать только 5 значений.

Ответ 6

Решение:

1) Установите IDENTITY_INSERT в положение ON.

2) Вставьте данные клиентов в таблицу Customer.

3) Установите IDENTITY_INSERT в положение OFF.

прочитайте полную статью здесь.

Ответ 7

set identity_insert customer on
insert into Customer(id,Name,city,Salary) values(8,'bcd','Amritsar',1234)

где "customer" - это имя таблицы