0

所以我有 2 个表需要在其中插入类似的数据。它们是不同应用程序访问的员工数据库。他们是:

  • dbo_Employees
  • dbo_EmpDefaultSchedules
  • dbo_EmpUsers
  • dbo_EmpDefaultLocation

依此类推dbo_Employees,当您插入一行时,会自动创建主键。该列称为EmpID。这些不同的表中总共添加了大约 22 个不同的列。它们是诸如FirstName, LastName, Address,Phone等之类的东西,等等。

我正在尝试创建一个脚本,我可以在其中获取变量列表,一次输入它们,然后运行该脚本以一次将其添加到 4 个表中(最终 HR 将输入信息并自己创建的网页)

唯一给我带来麻烦的是dbo_EmpDefaultSchedulesdbo_Employees这是因为我需要将( ) 中的主键EmpID插入到dbo_EmpDefaultSchedules中,显然它是在脚本的第一部分运行之前创建的。我对第二部分的插入语句是这样的:

INSERT INTO [Database].[dbo].[EmpDefaultSchedules] (StaffCode, EmpID, LastName, FirstName, Dept, MgrStaffCode, IsMgr, PayrollStatus, PayFrequency, StdHrsWk, EmailAddress )
VALUES (@StaffCode, (select EmpID from [Database].[dbo].[Employees] WHERE StaffCode = @StaffCode), @LastName, @FirstName, @Dept, @MgrStaffCode, @IsMgr, @PayrollStatus, @PayrollFrequency, @StdHrsWk, @EmailAddress)

当我这样做时,我收到此错误:

在这种情况下不允许子查询。只允许标量表达式。

我已经看到/读过这个: 在这种情况下不允许子查询。只允许标量表达式

还有这个: MYSQL插入多个表

还有这个: 如何将 sql 查询中的值存储到变量中?

还有这个: 如何将 SELECT + WHERE 查询与 INSERT 查询结合起来?

但仍然无法让它发挥作用。

4

2 回答 2

2

在插入员工后,您可以使用 SCOPE_IDENTITY 将身份检索到变量中

SCOPE_IDENTITY (Transact-SQL)

于 2012-08-02T18:30:20.437 回答
0

你可以做的是以下。

insert into Employees values (x,y,z)
insert into EmpDefaultSchedules (@staffcode, @@identity,....)

@@identity 填充了插入的 EmpID,您可以稍后使用。如果您在员工之后和 EmpDefaultschedules 之前插入另一条记录,请确保将 @@identity 放在变量中

declare @EmpId int
insert into Employees values (x,y,z)
set @EmpId = @@identity
insert into EmpDefaultSchedules (@staffcode, @EmpId,....)
于 2012-08-03T09:23:12.993 回答