Столбец идентификации не работает - PullRequest
1 голос
/ 07 марта 2012

У меня проблема с вставкой записи в конкретную таблицу относительно личности. Но SQL всегда говорит мне, что мне нужно включить identity_insert, но я уже установил столбец идентификаторов для этой таблицы, так что я уверен, что он не будет выдавать несколько идентификаторов. Кстати, в моей таблице уже есть записи. Вот мой код

declare @empid int
declare @trans_name varchar(max) = 'Append'
declare @lname varchar(max)
declare @fname varchar(max)
declare @mname varchar(max)
declare @emp_id varchar(max)
declare @gender varchar(max)
declare @bday datetime
declare @allowance numeric(18,2)
declare @emp_sysid numeric(18,0)
declare @datehired datetime
declare @status varchar(max)
declare @positionid numeric(18,0)

declare cc_cur cursor for
    select emps.LNAME, emps.MNAME, emps.FNAME, emps.EMP_ID,
    emps.GENDER, emps.BDAY, emps.ALLOWANCE, emps.SYSID, 
    emps.DATE_HIRED, emps.[STATUS], emps.POSITION_SYSID
    from SPADA.dbo.M_EMPLOYEE emps
        where emps.SYSID not in (select ISNULL(B.SPADAEmpID, 0) from SPADA_FIS.dbo.HRIS_Employees B
                                inner join SPADA_FIS.dbo.HRIS_EmployeeStatus C
                                    on C.EmployeeID = B.EmployeeID where C.IsCurrent = 1)

open cc_cur
fetch next from cc_cur
into @lname, @mname, @fname, @emp_id, 
     @gender, @bday, @allowance, @emp_sysid, 
     @datehired, @status, @positionid

begin tran @trans_name
    while @@FETCH_STATUS = 0
    begin
        insert into SPADA_FIS.dbo.HRIS_Employees
        (LastName, MiddleName, FirstName, OtherName,
        Gender, BirthDate, Allowance)
        values
        (@lname, @mname, @fname, @emp_id,
        @gender, @bday, @allowance)

        set @empid = SCOPE_IDENTITY()

        insert into SPADA_FIS.dbo.HRIS_EmployeeStatus
        (EmployeeID, EmploymentTypeID, DepartmentID, EmploymentTenureID,
        Remarks, DateHired, JobOrganizationID, EmployeeStatusID, IsCurrent,
        PayFrequencyID, TaxExemptionStatus)
        values
        (@empid, 1, 6, (select htet.EmploymentTenureID 
                                from SPADA_FIS.dbo.HRIS_tblEmploymentTenures htet
                                    where htet.Tenure = @status),
        'Migrated Data', @datehired, (select htjo.JobOrganizationID from SPADA_FIS.dbo.HRIS_tblJobOrganizations htjo
                                            where htjo.Position = (select pos.POSITION from SPADA.dbo.M_POSITION pos
                                                where pos.SYSID = @positionid) or htjo.Position = 
                                                    (select pos2.[DESCRIPTION] from SPADA.dbo.M_POSITION pos2
                                                        where pos2.SYSID = @positionid)),
        1, 1, 2, 2)
        fetch next from cc_cur
        into @lname, @mname, @fname, @emp_id, 
             @gender, @bday, @allowance, @emp_sysid, 
             @datehired, @status, @positionid
    end
    close cc_cur
    deallocate cc_cur
if @@ERROR <> 0
rollback tran @trans_name
commit tran @trans_name

Если я установил identity_insert на .. столбец идентификаторов выдает значение только 1.

Это структура моего стола

USE [SPADA_FIS]
GO

/****** Object:  Table [dbo].[HRIS_EmployeeStatus]    Script Date: 03/07/2012 17:13:03 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[HRIS_EmployeeStatus](
    [EmployeeStatusID] [int] IDENTITY(1,1) NOT NULL,
    [EmployeeID] [int] NULL,
    [EmploymentTypeID] [int] NULL,
    [DepartmentID] [int] NULL,
    [EmploymentTenureID] [int] NULL,
    [Remarks] [varchar](max) NULL,
    [DateHired] [datetime] NULL,
    [JobOrganizationID] [int] NULL,
    [SectionID] [int] NULL,
    [EmploymentStatusID] [int] NULL,
    [IsCurrent] [bit] NULL,
    [StartDate] [datetime] NULL,
    [IsUnionMember] [bit] NULL,
    [EndDate] [datetime] NULL,
    [PayFrequencyID] [int] NULL,
    [TaxExemptionStatus] [bigint] NULL,
    [IDNumber] [varchar](50) NULL,
    [BiometricNumber] [varchar](50) NULL,
    [BankAccountNumber] [varchar](50) NULL,
    [CreatedBy_UserID] [int] NULL,
    [CreatedDate] [datetime] NULL,
    [UpdatedBy_UserID] [int] NULL,
    [UpdatedDate] [datetime] NULL,
 CONSTRAINT [PK_HRIS_EmployeeStatus] PRIMARY KEY CLUSTERED 
(
    [EmployeeStatusID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_EmployeeID]  DEFAULT ((0)) FOR [EmployeeID]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_EmploymentTypeID]  DEFAULT ((0)) FOR [EmploymentTypeID]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_DepartmentID]  DEFAULT ((0)) FOR [DepartmentID]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_EmploymentTenureID]  DEFAULT ((0)) FOR [EmploymentTenureID]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_DateHired]  DEFAULT (getdate()) FOR [DateHired]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_JobOrganizationID]  DEFAULT ((0)) FOR [JobOrganizationID]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_SectionID]  DEFAULT ((0)) FOR [SectionID]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_EmploymentStatusID]  DEFAULT ((0)) FOR [EmploymentStatusID]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_IsCurrent]  DEFAULT ((1)) FOR [IsCurrent]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_StartDate]  DEFAULT (getdate()) FOR [StartDate]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_IsUnionMember]  DEFAULT ((0)) FOR [IsUnionMember]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_EndDate]  DEFAULT (getdate()) FOR [EndDate]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_PayFrequencyID]  DEFAULT ((0)) FOR [PayFrequencyID]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_TaxExemptionStatus]  DEFAULT ((0)) FOR [TaxExemptionStatus]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_CreatedBy_UserID]  DEFAULT ((0)) FOR [CreatedBy_UserID]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_CreatedDate]  DEFAULT (getdate()) FOR [CreatedDate]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_UpdatedBy_UserID]  DEFAULT ((0)) FOR [UpdatedBy_UserID]
GO

ALTER TABLE [dbo].[HRIS_EmployeeStatus] ADD  CONSTRAINT [DF_HRIS_EmployeeStatus_UpdatedDate]  DEFAULT (getdate()) FOR [UpdatedDate]
GO

Ответы [ 4 ]

3 голосов
/ 07 марта 2012

Это ваша проблема: у вас есть:

CREATE TABLE [dbo].[HRIS_EmployeeStatus](
    [EmployeeStatusID] [int] IDENTITY(1,1) NOT NULL,

, и в вашем выражении INSERT вы пытаетесь вставить что-то в этот столбец:

insert into SPADA_FIS.dbo.HRIS_EmployeeStatus
        (EmployeeID, EmploymentTypeID, DepartmentID, EmploymentTenureID,
        Remarks, DateHired, JobOrganizationID, EmployeeStatusID, IsCurrent,
                                               *****************
        PayFrequencyID, TaxExemptionStatus)

Не делайтетот !Столбец IDENTITY будет обрабатываться самим SQL Server.Просто удалите этот столбец из оператора INSERT (и значение из коллекции VALUES), и все будет в порядке.

1 голос
/ 07 марта 2012

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

Если вы хотите явно вставить значение для такого столбца, вам нужно установить для свойства ' identity_insert ' значение 'true'

0 голосов
/ 07 марта 2012

Ответ, как уже было сказано, не в том, чтобы явно указывать значение для Employee StatusId

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

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

0 голосов
/ 07 марта 2012

Ах, старые добрые базы данных по кадрам, почти как в учебниках ... Вам нужно удалить «EmployeeStatusId» из

insert into SPADA_FIS.dbo.HRIS_EmployeeStatus...

, как это определено как

[EmployeeStatusID] [int] IDENTITY(1,1) NOT NULL,

поэтому он будет автоматически сгенерирован при вставке.

...