在包含许多表的数据库中,如果数据不存在,我需要编写一个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'
)问题:
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行。
任何帮助
答案 0 :(得分:0)
你写了
我尝试用select语句替换1但查询失败
但我想知道为什么会失败?你尝试了什么?这应该有效:
INSERT INTO Client (id, name, createdate, currencyId)
SELECT
6,
'Joe',
current_date,
(select c.id from currency as c where c.code = 'USD') as currencyId
WHERE not exists (SELECT * FROM Client where id=6);
答案 1 :(得分:0)
如果数据存在,您似乎可以解决问题。 以下是SQL Server / Sybase编写的一小段代码,我认为这些代码可以解答您的基本问题:
create table currency(
id numeric(16,0) identity primary key,
code varchar(3) not null,
lastupdated datetime not null,
rate smallint
);
create table client(
id numeric(16,0) identity primary key,
createddate datetime not null,
currencyid numeric(16,0) foreign key references currency(id)
);
insert into currency (code, lastupdated, rate)
values('EUR',GETDATE(),3)
--inserts the date and last allocated identity into client
insert into client(createddate, currencyid)
values(GETDATE(), @@IDENTITY)
go