2012-07-30 62 views
0

我有兩個表和它們通過「debt_key」連這裏的表結構引用其他表的SQL SELECT語句

注意表:

Note_Key (numeric(9,0),not null) 
Debtor_Key(numeric(9,0),not null) 
Debt_Key(numeric(9,0),not null) 
User_Key(numeric(5,0),not null) 
Note_Date(datetime, not null) 
Note_Time(char(8),not null) 
Note_Text(Char(80),not null) 

債務表:

Debt_key 
ACCT 

....等等,但我們只需要使用這兩個字段。

所以我試圖添加新的筆記與日期和時間到注表中。到目前爲止,我一直沒有成功。下面是我自己編寫的基本結果:

INSERT INTO NOTE (b.NOTE_DATE, b.NOTE_TIME, b.NOTE_TEXT) 
VALUES('2012-07-11 00:00:00.000','00:00:00','ASSIGNED FOR PI CONTACT') 
    SELECT NOTE_DATE, NOTE_TIME, NOTE_TEXT 
    FROM DEBT a JOIN NOTE B ON B.DEBT_KEY = A.DEBT_KEY AND A.DEBT_KEY = '5797071' 

當我執行它給我這個錯誤:

Cannot insert the value NULL into column 'NOTE_KEY', table 'Ads_Mast.dbo.NOTE'; column does not allow nulls. INSERT fails. The statement has been terminated.

我的值不會增加Note_key列,雖然,因爲它是自動遞增。有任何想法嗎?

謝謝。

+3

在你的'Note'表中你有7列 - 都是'NOT NULL'。如果要插入一行,則需要爲所有七列**插入值**(或者對它們有默認約束)。你的第一個'INSERT'只會嘗試插入三列..... – 2012-07-30 19:44:33

+0

這些是我可以編輯的唯一三列,這就是爲什麼我寫它只能插入三列。 3的foriegn鍵我什麼也做不了,Note_Key是自動增量。 – Markpelly 2012-07-30 19:53:42

+0

由於我無法編輯這些內容,我該如何編寫它以允許它們自行更新? – Markpelly 2012-07-30 19:54:41

回答

2

如果您正在嘗試INSERT新筆記,則需要使用INSERT INTO SELECT FROM,如果您要加入第二個表。您還需要在您的Notes表中的每個字段的值:

INSERT INTO NOTE 
(
    Note_Key, 
    Debtor_Key, 
    Debt_Key, 
    User_Key, 
    NOTE_DATE, 
    NOTE_TIME, 
    NOTE_TEXT 
) 
SELECT b.Note_Key, a.Debtor_Key, a.Debt_Key, b.NOTE_DATE, a.User_Key, b.NOTE_TIME, b.NOTE_TEXT 
FROM DEBT a JOIN NOTE B 
    ON B.DEBT_KEY = A.DEBT_KEY 
WHERE A.DEBT_KEY = '5797071' 

如果你知道你要提交當時的值,你需要做到以下幾點:

INSERT INTO NOTE 
(
    Debtor_Key, 
    Debt_Key, 
    User_Key, 
    NOTE_DATE, 
    NOTE_TIME, 
    NOTE_TEXT 
) 
VALUES 
(
    0, -- the Debtor_Key value 
    1, -- the Debt_Key value 
    1, -- the User_Key value 
    '2012-07-11 00:00:00.000', 
    '00:00:00', 
    'ASSIGNED FOR PI CONTACT' 
) 

編輯如果你有從表中的一些常量和一些值,然後進行以下操作:

INSERT INTO NOTE 
(
    Debtor_Key, 
    Debt_Key, 
    User_Key, 
    NOTE_DATE, 
    NOTE_TIME, 
    NOTE_TEXT 
) 
SELECT a.Debtor_Key 
    , a.Debt_Key 
    , '2012-07-11 00:00:00.000' 
    , a.User_Key 
    , '00:00:00' 
    , 'ASSIGNED FOR PI CONTACT' 
FROM DEBT a JOIN NOTE B 
    ON B.DEBT_KEY = A.DEBT_KEY 
WHERE A.DEBT_KEY = '5797071' 

但如果你只是想UPDATE特定的值,那麼你可以使用一個UPDATE

UPDATE b 
SET NOTE_DATE = '2012-07-11 00:00:00.000' 
    , NOTE_TIME = '00:00:00' 
    , NOTE_TEXT = 'ASSIGNED FOR PI CONTACT' 
FROM Note b 
JOIN DEBT a 
    ON B.DEBT_KEY = A.DEBT_KEY 
WHERE A.DEBT_KEY = '5797071' 
+0

我希望'Debtor_Key','Debt_Key'和'User_Key'都有默認值,因爲它們是'NOT NULL',但是你沒有爲它們插入任何值。 – LittleBobbyTables 2012-07-30 19:45:30

+0

註釋字段中已經有「註釋」,我不能只更新它。 Debtor_key,debt_key和User_key都已在其他表中(債務人表,債務表和用戶表)。 – Markpelly 2012-07-30 20:00:30

+0

我不明白你的第一條語法是如何工作的。 'note_text'在哪裏我需要投入該領域? – Markpelly 2012-07-30 20:02:11