为SQL Select语句引用其他表
我有两个表,它们通过“debt_key”连接。下面是表结构 注意表格:为SQL Select语句引用其他表,sql,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 nu
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_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'
当我执行时,它会给我以下错误:
无法将值NULL插入表的“NOTE_KEY”列中
“Ads_Mast.dbo.NOTE”;列不允许空值。插入失败。这个
声明已终止
我无法向Note_key列添加值,因为它是自动递增的。有什么想法吗
谢谢。如果您试图插入新的注释,那么如果您要加入第二个表,则需要使用
插入到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'
编辑:如果表中有一些常量值和一些值,请执行以下操作:
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 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'
在
注释
表中有七列-全部非空
。如果要插入行,则需要为所有七列插入值(或对其具有默认约束)。您的第一个INSERT
仅尝试插入三列…..但是,这是我能够编辑的唯一三列,这就是为什么我将其编写为仅插入三列。3个外键我无能为力,而Note_键是自动递增的。既然我不能编辑它们,我如何编写它以允许它们自我更新?我希望债务人_键
,债务_键
和用户_键
都有默认值,由于它们不是空的,但您没有为它们插入任何值。注释字段中已经有“Notes”,我不能只更新它。债务人密钥、债务密钥和用户密钥都已在其他表(债务人表、债务表和用户表)中。我不明白您的第一段语法是如何工作的。我需要放在该字段中的“note_text”放在哪里?@Mark是否要将注释附加到已存在的注释中?还是需要对所有表进行联接才能获得字段?@标记第一个是在select语句中从表中选择值。