SQL Server: хранимая процедура пытается вставить NULL? - PullRequest
0 голосов
/ 20 ноября 2010
Msg 515, Level 16, State 2, Procedure CreateParty, Line 16
Cannot insert the value NULL into column 'Id', table 'DEVIN.dbo.Party';

столбец не допускает пустых значений. ВСТАВИТЬ выходит из строя. Заявление было прекращено.

(1 row(s) affected)

Какого черта? Мой стол состоит из

Id (Primary Key)
FirstName
LastName

Вот моя хранимая процедура:

USE [DEVIN]
GO
/****** Object:  StoredProcedure [dbo].[CreateParty]    Script Date: 11/19/2010 16:59:43 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      
-- Create date: 
-- Description: 
-- =============================================
ALTER PROCEDURE [dbo].[CreateParty]
    @firstname varchar(50),
    @lastname varchar(50)
    --@emailaddress varchar(100),
    --@zipcode char(5)
AS
BEGIN

    SET NOCOUNT ON;

    INSERT INTO Party (FirstName, LastName)
    Values (@firstname,@lastname)

END

Может кто-нибудь узнать, какого чёрта я получу эту ошибку? Это так раздражает ...


Кроме того, по какой-то причине SQL Management отображает только столбец «Id» в intellisense. Понятия не имею, почему ...

SCREENSHOT: alt text

У него еще нет идентификатора "PK_Party"? Это происходит автоматически .. Я должен что-то упустить ...

Ответы [ 5 ]

8 голосов
/ 20 ноября 2010
INSERT INTO Party (FirstName, LastName)
    Values (@firstname,@lastname)

Вы не указываете значение для столбца Id, поэтому INSERT попытается вставить значение по умолчанию :

  • для IDENTITY()столбец, значением по умолчанию будет следующий идентификатор
  • для столбца с ограничением DEFAULT, значением по умолчанию будет значение ограничения
  • , все остальное будет NULL

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

4 голосов
/ 20 ноября 2010

Идентификатор - это идентичность, а также первичный ключ?Сам по себе PK не заполняет данные для столбца при вставке.

0 голосов
/ 19 мая 2016

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

На данный момент вам нужно снова создать таблицу, и через дизайн вы должны увеличить значение.

0 голосов
/ 22 ноября 2010

Бросьте и воссоздайте свой стол с указанным именем. Если у вас уже есть данные, это сложнее, чем это.

Пример сценария для создания таблицы с удостоверением:

USE [MyDatabase]
GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTable') AND type in (N'U'))
DROP TABLE MyTable
GO


CREATE TABLE MyTable(
    [ID] [int] IDENTITY (1,1) NOT NULL,
    [LASTNAME] [varchar](500) NULL,
    [FIRSTNAME] [varchar](500) NULL


) ON [PRIMARY]

GO
0 голосов
/ 20 ноября 2010

Попробуйте использовать код

INSERT INTO Party
Values (@firstname,@lastname)

вместо INSERT INTO Party (FirstName, LastName) Values (@firstname,@lastname)

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