0

したがって、同様のデータを挿入する必要がある2つのテーブルがあります。これらは、さまざまなアプリケーションがアクセスする従業員 DB です。彼らです:

  • dbo_Employees
  • dbo_EmpDefaultSchedules
  • dbo_EmpUsers
  • dbo_EmpDefaultLocation

同様dbo_Employeesに、行を挿入すると、主キーが自動作成されます。その列は と呼ばれEmpIDます。これらの異なるテーブルには、合計で約 22 の異なる列が追加されています。それらは、、、、、などのようなものFirstNameです。LastNameAddressPhone

変数のリストを取得して一度に入力し、そのスクリプトを実行して一度に 4 つのテーブルに追加できるスクリプトを作成しようとしています (最終的には、HR が情報を入力して自分で作成する Web ページ) )

私を悩ませているのは だけですdbo_EmpDefaultSchedules。これは、dbo_Employees( EmpID) からの主キーを に挿入する必要がありdbo_EmpDefaultSchedules、明らかに、スクリプトの最初の部分が実行されるまで作成されないためです。2番目の部分の挿入ステートメントは次のとおりです。

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 を使用して ID を変数に取得します。

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 が入力されます。Employees の後、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 に答える