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

SQL Server, не может вставить нуль в поле первичного ключа?

Я собираюсь вырвать мои волосы на этом. Я новичок в MS SQL, и нигде не видел подобного сообщения.

Когда я пытаюсь сделать выражение вроде этого:

INSERT INTO qcRawMatTestCharacteristic 
VALUES(NULL, 1,1,1,1,1,1,1,'','','', GETDATE(), 1)

Я получаю следующее:

Невозможно вставить значение NULL в столбец "iRawMatTestCharacteristicId", Таблица 'Intranet.dbo.qcRawMatTestCharacteristic'; столбец не допускает нулей. ВСТАВИТЬ выходит из строя.

Я понимаю ошибку, но нулевое значение для моего моего основного поля с типом данных int.

Любые идеи!?

4b9b3361

Ответ 1

Первичные ключи в любой реляционной базе данных не могут быть NULL - это одна из основных основных характеристик первичного ключа.

Смотрите: SQL by Design: как выбрать первичный ключ

Never Null
Значение первичного ключа не может быть нулевым, и вы не можете ничего сделать сделать первичный ключ нулевым. Это нерушимое правило реляционного модель, поддерживаемая ANSI, из система управления реляционными базами данных (RDBMS) и SQL Server.

UPDATE: в порядке, поэтому вы хотите получить первичный ключ "auto-increment" в SQL Server.

Вам нужно определить его как INT IDENTITY в инструкции CREATE TABLE:

 CREATE TABLE dbo.YourTable(ID INT IDENTITY, col1 INT, ..., colN INT)

а затем, когда вы выполняете INSERT, вам нужно явно указать столбцы для вставки, но просто не указывать столбец "ID" в этом списке - тогда SQL Server автоматически обрабатывает правильное значение:

 INSERT INTO dbo.YourTable(col1, col2, ..., colN) -- anything **except** `ID`      
 VALUES(va1l, val2, ..., valN)

Если вы хотите сделать это после создания таблицы, вы можете сделать это в дизайнере таблицы SQL Server Management Studio:

alt text

Ответ 2

Поля первичного ключа не могут содержать нулевые значения в MS SQL. Если вы хотите заполнить таблицу SQL и не знаете, что вводить для поля первичного ключа с целым числом, установите pk в поле Identity. Кроме того, при указании операторов Insert целесообразно использовать часть отображения столбцов вставке, например:

Insert into (field1, field2, field3)
values
(value1, value2, value3)

Причиной этого является то, что порядок столбцов - это то, что вы разработали, поскольку администратор SQL может изменять порядок столбцов. Он также позволяет вам вставлять строку с идентификационным ключом Первичный ключ без указания значения примера первичного ключа

CREATE TABLE [dbo].[foo](
    [fooid] [int] IDENTITY(1,1) NOT NULL,
    [name] [varchar](50) NULL,
 CONSTRAINT [PK_foo] PRIMARY KEY
(
        [fooid] ASC
)

теперь моя инструкция insert проста

Insert into foo (name)
values
("John")

результат в таблице будет

1, "John"

Ответ 3

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

Ответ 4

Первичные ключи не должны принимать значение null.Почему вы вставляете нулевые значения в поле первичного ключа? Поле первичного ключа должно иметь уникальное значение, не имеющее нулевых значений, которое сделает каждую вашу запись в уникальной таблице

Ответ 5

вы можете использовать 0 вместо нуля только для 1 уникальной строки, для PK невозможно использовать null. Или вы можете опустить PK и использовать и автоматически увеличивать PK-поле

Ответ 6

Предполагая, что у вас есть поле автоинкремента для вашего основного ключа, вам нужно будет включить список полей в свою вставку и не поместить значение для этого поля, например.

INSERT INTO qcRawMatTestCharacteristic 
(Answer1,Answer2,...SomeDateField)
VALUES(1,1,1,1,1,1,1,'','','', GETDATE(), 1)

Ответ 7

Я предполагаю, что ваша настоящая проблема заключается в том, что вы не знаете, как написать инструкцию insert, чтобы PK автоматически заполнялась правильно? Вам нужно указать поля, для которых вы устанавливаете значения, похоже, вы пытаетесь установить их все, но просто исключите PK-поле так:

INSERT INTO someTable
(fieldName1, fieldName2) 
VALUES(1,1)

Где sometable - таблица с тремя полями. PK, fieldName1 и fieldName2. Вы также должны убедиться, что для свойства идентификации в поле PK установлено значение true.

Ответ 8

если у вас есть столбец идентификатора, вам не нужно указывать его в инструкции insert.

INSERT INTO qcRawMatTestCharacteristic  
VALUES(1,1,1,1,1,1,1,'','','', GETDATE(), 1) 

Однако, если у вас есть первичный ключ, который не является столбцом идентификатора, тогда вам нужно его указать, поскольку в противном случае он попытается вставить нулевые и первичные ключи по умолчанию, не имеют значения null.