1
votes

Code:

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[AddUpdateCustomer]
      @CustomerID NCHAR(5),
      @ContactName NVARCHAR(30),
      @CompanyName NVARCHAR(40)
AS
BEGIN
      SET NOCOUNT ON;
    IF EXISTS(SELECT * FROM Customers WHERE CustomerID = @CustomerID)
    BEGIN
            UPDATE [Customers]
            SET [CompanyName] = @CompanyName
               ,[ContactName] = @ContactName
            WHERE CustomerID = @CustomerID
    END
    ELSE
    BEGIN
            INSERT INTO [Customers]
           ([CustomerID]
           ,[CompanyName]
           ,[ContactName])
        VALUES
           (@CustomerID
           ,@CompanyName
           ,@ContactName)
    END

    SELECT [CustomerID]
          ,[CompanyName]
          ,[ContactName]
      FROM Customers         
END

When I am inserting data in textbox this error occurs:

Cannot insert explicit value for identity column in table 'Customers' when IDENTITY_INSERT is set to OFF

2
So what exactly is your question? You can either set IDENTITY_INSERT to ON, or not insert the ID's.HoneyBadger
CustomerID is not an nchar if it is an identity column. Do you know what "identity" means?Crowcoder

2 Answers

4
votes
ALTER PROCEDURE [dbo].[AddUpdateCustomer]
      @CustomerID  INT           OUTPUT,
      @ContactName NVARCHAR(30),
      @CompanyName NVARCHAR(40)
AS
BEGIN
      SET NOCOUNT ON;
    IF EXISTS(SELECT * FROM Customers WHERE CustomerID = @CustomerID)
    BEGIN
            UPDATE [Customers]
            SET [CompanyName] = @CompanyName
               ,[ContactName] = @ContactName
            WHERE CustomerID = @CustomerID
    END
    ELSE
    BEGIN
        INSERT INTO [Customers]
           ([CompanyName]
           ,[ContactName])
        VALUES
           (@CompanyName
           ,@ContactName)
        SET @CustomerID = SCOPE_IDENTITY()
    END

    SELECT [CustomerID]
          ,[CompanyName]
          ,[ContactName]
    FROM Customers  
    WHERE [CustomerID] = @CustomerID
END
1
votes

To an identity column you cannot insert data explicitly. To insert data into an identity column explicitly you need to set the IDENTITY_INSERT to ON.You can do it by using the below.

 SET IDENTITY_INSERT Database.table_name ON