我有两个表,第一个是accounts
,第二个是client
。当客户注册时,我必须将他的电子邮件和密码插入accounts
表,并将其他信息插入到client
表中,并使用新创建的accounts
表的外键。为什么我的查询没有运行?
INSERT INTO client (account_id, name, horoscope, credit, receive_email)
VALUES
(INSERT INTO accounts(email, password, user_type)
OUTPUT inserted.id
VALUES ('test@example.com', 12, 0),
'name', 'Libra', 0.0, 0);
在这种情况下,如何使用单个查询在两个表中插入数据,我该怎么办?
答案 0 :(得分:2)
您编写的SQL查询不正确,您需要将其分为两个语句,如下所示,假设 account_id 是标识列。
INSERT INTO [accounts]
(email,
password,
user_type)
VALUES ( 'test@example.com',
12,
0 )
INSERT INTO client
(account_id,
NAME,
horoscope,
credit,
receive_email)
VALUES ( SCOPE_IDENTITY(),
'name',
'Libra',
0.0,
0 )
如果 account_Id 不是身份列,您可以将其写为以下内容(假设帐户表中的电子邮件ID是唯一的)。
INSERT INTO [accounts]
(email,
password,
user_type)
VALUES ( 'test@example.com',
12,
0 )
INSERT INTO client
(account_id,
NAME,
horoscope,
credit,
receive_email)
SELECT TOP 1 account_id,
'name',
'Libra',
0.0,
0
FROM [accounts]
WHERE email = 'test@example.com'
注意:您还需要处理事务,因为在这种情况下涉及两个插入。如果您不是从前端处理此问题,则需要在数据库级别处理此问题。要了解有关SQL Server中事务的更多信息,请访问MSDN
答案 1 :(得分:1)
我认为您可以使用scope_identity()
来重新插入ID
:
DECLARE @ID INT
INSERT INTO accounts
(
email,
password,
user_type
)
SELECT @ID = scope_identity()
INSERT INTO client
(
account_id,
name,
horoscope,
credit,
receive_email
)
VALUES
(
@ID,
'name',
'Libra',
0.0,
''
);