我想执行数据库更改。我有两个表设置如下:查找是我创建的临时查找表。我也添加了一个名为cur_format的新列,但它是空的。
Currency
_______
[cur_format] [nchar](10) NULL,
[cur_format_old] [int] NULL
[other_data] [int] NULL
cur_format_old cur_format other_data
0 565656
1 498985
2 145126
3 236124
2 789565
4 784512
Lookup
__________
[cur_format] [nchar](10) NULL,
[cur_format_old] [int] NULL
cur_format_old cur_format
0 USD
1 GBP
2 AUD
3 CAD
4 CNY
更新后,我希望货币表格如下:
Currency
______
cur_format_old cur_format other_data
0 USD 565656
1 GBP 498985
2 AUD 145126
3 CAD 236124
2 AUD 789565
4 CNY 784512
查找表大约有100行。而且Currency表相当大,因此,我想使用脚本来更新表。 我如何在sql-server中实现这一点?非常感谢
答案 0 :(得分:1)
我认为你想要update
join
:
update c
set cur_format = l.cur_format
from currency c join
lookup l
on c.cur_format_old = l.cur_format_old;
这只会更新两个表之间匹配的值。
答案 1 :(得分:0)
正如其他人所说,这没有任何意义。您似乎正在对数据库进行非规范化。还注意到,使用当前的数据类型,这不会起作用。留下所有合理的考虑因素可以做你所要求的。同样,这对我来说似乎是一个非常糟糕的主意,但这里有一个完整的脚本,包括更改数据类型。
alter table Currency
add NewFormat varchar(3)
update Currency
set NewFormat = l.cur_format
from Currency c
join MyLookup l on l.cur_format_old = c.cur_format
alter table Currency
drop column cur_format
EXEC sp_rename 'Currency.NewFormat', 'cur_format', 'COLUMN';
select * from Currency