我遇到有关身份的特定表格插入记录的问题。但SQL总是告诉我,我需要启用identity_insert,但我已经为该表设置了标识列,这样我确定它不会产生多个id。顺便说一下,我的桌子已经有了记录。这是我的代码
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设置为on ..标识列仅生成值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
答案 0 :(得分:3)
这是你的问题:你有:
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 :(得分:1)
您似乎正在尝试在标记为“identity”列的列中插入值。因此你得到了错误。插入新行时,服务器会自动生成标识列值。
如果您想明确插入此类列的值,则需要将“identity_insert”属性设置为“true”
答案 2 :(得分:0)
啊,好老的人力资源数据库,几乎就像在教科书中......你需要从
中删除'EmployeeStatusId'insert into SPADA_FIS.dbo.HRIS_EmployeeStatus...
因为它被定义为
[EmployeeStatusID] [int] IDENTITY(1,1) NOT NULL,
所以它会在插入时自动生成。
答案 3 :(得分:0)
已经提供的答案不是为Employee StatusId
明确提供值作为一个单独的点,您应该删除EmployeeStatusId上的默认约束
您应该无法在标识列上创建默认约束...