2012-01-28 114 views
0

好的我已經搜索了一個答案,但沒有找到它,也許我只是沒有輸入正確的問題,所以這裏什麼都不做。我有2個表,我的兩個表都有一個自動生成的PK。表2中的PK是表1中的FK。由於它們都是自動生成的,因此我假定表1中的FK將填充表2中自動生成的值,但它不起作用。表1中的FK顯示爲空。以下是創建表1我的SQL代碼:外鍵不填充主鍵值

CREATE TABLE Employee_tbl (
EmployeeID int PRIMARY KEY IDENTITY, 
LastName varchar(20) not null, 
FirstName varchar(20) not null, 
[Address] varchar(60)not null, 
City varchar(20) not null, 
[State] varchar(20) not null, 
TelephoneAreaCode varchar(3) not null, 
TelephoneNumber varchar(7) not null, 
HireDate date, 
Salary varchar(20) not null, 
Gender char(1) not null, 
Age varchar(3) not null, 
JobID int FOREIGN KEY REFERENCES JobTitle_tbl(JobID), 
) 

這裏是表2:

create table JobTitle_tbl(
JobID int PRIMARY KEY IDENTITY, 
EEO1Classification varchar(50) not null, 
Job_title varchar(50) not null, 
Job_description varchar(MAX) not null, 
Exempt_nonexempt_status varchar(20) not null, 
) 

我也有一些插入語句:

INSERT INTO Employee_tbl (LastName, FirstName, [Address], City, [State], TelephoneAreaCode, 
TelephoneNumber, HireDate, Salary, Gender, Age) 
Values 
('Smith', 'John', '1234 Number Lane', 'Los Angeles', 'California', '555', 
'8675309', '10/07/2003', '20,000.00', 'M', '50'), 
... 

和:

INSERT into JobTitle_tbl (EEO1Classification, Job_title, Job_description, Exempt_nonexempt_status) 
VALUES 
('Office/Clerical', 'Accounting Clerk', 'Computes classifies records and verifies numerical data for use in maintaining 
accounting records. Essential Duties 
1. Compiles and sorts documents, such as invoices and checks, 
substantiating business transactions. 
2. Verifies and posts details of business transactions, such as funds received 
and disbursed, and totals accounts to ledgers or computer spreadsheets 
and databases. 
3. Audits invoices against purchase orders, researches discrepancies, and 
approves for payment. 
4. Computes and records charges, refunds, cost of lost or damaged goods, 
freight charges, rentals and similar items. 
5. Prepares vouchers, invoices, checks, account statements, reports and 
other records and reviews for accuracy. 
6. Reconciles general ledger accounts with various registers. 
7. Reconciles bank statements. 
8. Monitors accounts payable and receivable to ensure that payments are up 
to date. 
9. Assists employees, vendors, clients, or customers by answering questions 
related to accounts, procedures, and services. 
Required Qualifications and Experience 
The accounting clerk must have excellent math and accounting skills, in addition 
to the ability to use Quick Books software for maintaining records.', 'Non-Exempt'), 

爲什麼FK值顯示爲空當我查詢表1?

+1

請問您可以減少問題中的措詞嗎?另外FK不是自動生成的。你將不得不明確插入子表 – 2012-01-28 16:42:19

回答

1

外鍵不會自動填充,因爲它不知道使用哪個外鍵。你需要或者插入行插入JobTitle_tbl表,然後選擇標識背出(或使用@@身份如果使用SQL Server)

select id from JobTitle_tbl where Job_title = '' 

另一種辦法是更新您的INSERT語句,包括主鍵,儘管你必須先允許身份插入。

SET IDENTITY_INSERT JobTitle_tbl ON 
into the JobTitle_tbl (id, title) values (1, 'Manager') 
SET IDENTITY_INSERT JobTitle_tbl OFF 

在這兩種情況下,你需要再更新,你有你的ID首先插入語句。

insert into Employee_tbl (LastName, FirstName, JobID) values ('Smith', 'John', 1) 
+0

我沒有關注,你能告訴我一些代碼嗎? – 2012-01-28 16:42:07

+0

所以我理解這個權利?沒有辦法讓fk自動填充? – 2012-01-28 16:53:28

+0

@JohnStewart:不,FK可以從不**自動填充 - 該行如何「知道」它屬於哪個父行!?!??這就是程序員知道的那樣**你需要給FK填充適當的值以建立到父行的鏈接。 – 2012-01-28 17:18:16