0

私は従業員のデータを格納する親テーブルを持っており、それは特定の従業員の給与に関するすべてのデータを格納する子テーブルの給与です EmployeeId に基づいて、すべての給与行を取得し、それらを別の ID を持つ給与テーブルに再度挿入しますId Auto Incremented を作成できません。ストアド プロシージャでこれを行う必要があります。

前もって感謝します。

Sqlserver 2008 を使用しています。

Employee Table
Id Name      Country 
1. Employee1 Pakistan
2. Employee2 India

Salary Table
Id EmployeeId Month Salary
1. 1          Jan   20000
2. 1          feb   25000
3. 1          Mar   30000

これで、給与テーブルからすべての行を取得し、それらを新しいIDで同じ給与テーブルに再度挿入したい従業員ID 1があります。

4

4 に答える 4

2

まあ、私が理解していることから、あなたはできるはずです

DECLARE @NewID INT = 2

INSERT INTO Salary (EmployeeId,Month,Salary)
SELECT @NewID, Month, Salary
FROM Salary
WHERE EmployeeId = 1

SQL フィドルのデモ

于 2013-10-08T06:08:48.207 に答える
0
CREATE PROC INSERTDETAILS1 (@EmpID int)
AS
BEGIN
DECLARE @Sal NUMERIC(18,2)

DECLARE Sal_Cursor CURSOR -- Declare cursor

LOCAL SCROLL STATIC

FOR

Select Salary FROM EmpSal where EmpID=@EmpID

OPEN Sal_Cursor -- open the cursor

FETCH NEXT FROM Sal_Cursor

   INTO @Sal

   INSERT INTO EmpSal VALUES ((SELECT TOP(1) EmpID FROM EmpSal ORDER BY EmpID DESC)+1,@Sal)


WHILE @@FETCH_STATUS = 0

BEGIN

   FETCH NEXT FROM Sal_Cursor

   INTO @Sal

   INSERT INTO EmpSal VALUES ((SELECT TOP(1) EmpID FROM EmpSal ORDER BY EmpID DESC)+1,@Sal)

END


CLOSE Sal_Cursor -- close the cursor

DEALLOCATE Sal_Cursor -- Deallocate the cursor

END
于 2013-10-08T06:57:50.613 に答える
0

Salary.Idが列ではなく、IDENTITY列になれない場合は、ROW_NUMBER関数を使用して、コピーしているサブセットに行番号を割り当て、それらをIdテーブルの最後の値に追加して、新しいIdsを取得できます。

INSERT INTO Salary (Id, EmployeeId, Month, Salary)
SELECT
  Id         = (SELECT MAX(Id) FROM Salary) + ROW_NUMBER() OVER (ORDER BY Id),
  EmployeeId = @NewEmpId,
  Month,
  Salary
FROM Salary
WHERE EmployeeId = @SrcEmpId
;
于 2013-10-09T18:25:28.927 に答える