2012-08-02 41 views
0

所以我有2個表格需要插入類似的數據。他們是不同應用程序訪問的員工數據庫。它們是:我需要暫時「存儲」信息,或將查詢放入查詢中,並插入SQL Server 2005中

  • dbo_Employees
  • dbo_EmpDefaultSchedules
  • dbo_EmpUsers
  • dbo_EmpDefaultLocation

於是就dbo_Employees,當你插入一行,主鍵是自動創建的。該欄被稱爲EmpID。總共有大約22個不同的列被添加到這些不同的表中。他們之類的東西FirstNameLastNameAddressPhone,等等等等

我試圖創建一個腳本,我可以採取的變量列表中輸入一次他們,並運行該腳本將其添加到最後4張桌子(最後是HR會輸入信息並自己創建的網頁)

唯一給我帶來麻煩的是dbo_EmpDefaultSchedules。這是因爲我需要從dbo_EmployeesEmpID)的主鍵插入到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) 

當我這樣做,我得到這個錯誤:

Subqueries are not allowed in this context. Only scalar expressions are allowed.

我已經看到/閱讀: Subqueries are not allowed in this context. Only scalar expressions are allowed

而且這樣的: MYSQL inserting into multiple tables

而這個: How do I store a value from a sql query into a variable?

這: How do I combine a SELECT + WHERE query with an INSERT query?

但仍不能得到這個工作。

回答

2
+0

我的道歉,我真的很新的SQL和鏈接的例子並沒有真正對我來說很有意義。我不確定它會返回什麼。那麼SCOPE_IDENTITY是否存儲了創建的最後一個ROW(所有字段)的值?如果是這樣,我將如何指定我想插入下一個表中的字段? – anthony 2012-08-02 19:18:17

+0

它只返回由標識列創建的值。自從你說它是自動生成的,我認爲EmpID是一個縮進列。 – Paparazzi 2012-08-02 20:31:06

+0

事後可以製作一個標識列嗎?沒有改變它的名字? – anthony 2012-08-03 13:17:53

0

剛過您檢索身份使用SCOPE_IDENTITY變量你可以做的是以下幾點。

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

@@ identity填充了插入的EmpID,您可以稍後使用它。如果插入的員工紛紛創出和EmpDefaultschedules之前,請確保你把@@身份變量

declare @EmpId int 
insert into Employees values (x,y,z) 
set @EmpId = @@identity 
insert into EmpDefaultSchedules (@staffcode, @EmpId,....) 
+0

但SQL如何知道@@ identity是EmpID?因爲我沒有插入EmpID來啓動。這是一個自動創建的PK。我已經對所有值使用「聲明」和「設置」(除了** EmpID **)。腳本的第一部分將值插入** Employee **中,EmpID是自動創建的。然後我需要將所述員工ID插入到** EmpDefaultSchedules **中,所以我需要從** Employee **中提取。 – anthony 2012-08-03 13:16:03

+0

不,這只是點。當插入一個帶有標識列的記錄(在本例中爲EmpID)時,它將把插入的標識存儲到@@ identity變量中。這是一個內部變量.. – 2012-08-03 14:40:54

+0

使用@@ indentity是危險的,因爲它獲取最後一個表,所以如果有一個具有標識的觸發器,它將從Employee以外的表中獲取值。 – Paparazzi 2012-08-03 15:55:21