为SQL Select语句引用其他表

时间:2012-07-30 19:41:42

标签: sql

我有两张桌子,他们通过' debt_key'这是表结构

注意表格:

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

....等等,但我们只需要使用这两个字段。

所以我想在Note表中添加带有日期和时间的新笔记。到目前为止,我一直没有成功。这是我写的基本结果:

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'

当我执行它时,给我这个错误:

  

无法将值NULL插入列' NOTE_KEY',表   ' Ads_Mast.dbo.NOTE&#39 ;;列不允许空值。 INSERT失败。该   声明已被终止。

我无法在Note_key列中添加值,因为它是自动递增的。有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分: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'