在包含许多表的数据库中,如果数据不存在,我需要编写一个 SQL 脚本来插入数据。
表币
| id | Code | lastupdate | rate |
+--------+---------+------------+-----------+
| 1 | USD | 05-11-2012 | 2 |
| 2 | EUR | 05-11-2012 | 3 |
表客户端
| id | name | createdate | currencyId|
+--------+---------+------------+-----------+
| 4 | tony | 11-24-2010 | 1 |
| 5 | john | 09-14-2010 | 2 |
表:账户
| id | number | createdate | clientId |
+--------+---------+------------+-----------+
| 7 | 1234 | 12-24-2010 | 4 |
| 8 | 5648 | 12-14-2010 | 5 |
我需要插入:
currency
(id=3, Code=JPY, lastupdate=today, rate=4
)client
(id=6, name=Joe, createdate=today, currencyId=Currency with Code 'USD'
)account
(id=9, number=0910, createdate=today, clientId=Client with name 'Joe'
)
问题:
- 脚本必须在插入新数据之前检查行是否存在
- 脚本必须允许我们将外键添加到新行,该外键与数据库中已找到的行相关(如客户表中的 currencyId)
- 脚本必须允许我们将当前日期时间添加到插入语句中的列(例如
createdate
在client
表中) - 脚本必须允许我们向新行添加外键,该外键与插入同一脚本中的行相关(例如
clientId
在account
表中)
注意:我尝试了以下 SQL 语句,但它只解决了第一个问题
INSERT INTO Client (id, name, createdate, currencyId)
SELECT 6, 'Joe', '05-11-2012', 1
WHERE not exists (SELECT * FROM Client where id=6);
此查询运行时没有任何错误,但正如您所看到的我手动编写createdate
的currencyid
,我需要从带有 where 子句的 select 语句中获取货币 id(我试图用 select 语句替换 1,但查询失败)。
这是一个关于我需要的示例,在我的数据库中,我需要这个脚本在 10 多个表中插入 30 多行。
任何帮助