使用创建表SQL Server 2008的多个SELECT into语句

时间:2012-06-12 19:21:00

标签: sql tsql database-design

我有一张大桌子,其中包含美国所有州和县的信息。

表结构是

    fullCode   countyName   stateName   stateCode
1   01001        nowhere      AL          01
2   01003        somewhere    AL          01
3   02100        other        AK          02

状态代码始终由fullCode列中的前两个数字标识。这些对于每个州都是唯一的,因此任何州都不会有多于一组的前两个数字。 countyCode上的最后三个数字。

我使用下面的查询来创建一个包含所有状态的表

select distinct stateName, statecode
into tblStates
from tblCounties

我很好奇如何能够一举为每个州的县创造一张桌子(如果可能的话)。像

这样的东西
select distinct  fullCode, countyName
into tblAlabamaCounties
from tblCounties
where stateName='AL'

但是对于每个州。当然,我必须处理所有PK / FK问题。只是想知道可能用来做这样的事情的方法。

编辑:如果这是一个设计错误,我还能如何关联处于特定州的县名?我可以将所有东西放在一张大桌子上,但这看起来像是糟糕的设计,想法?

2 个答案:

答案 0 :(得分:2)

这可能是您可能会考虑的更好的设计:

州表:

STATE_ID
STATE_ABBREV
STATE_NAME

县表:

COUNTY_ID
STATE_ID
COUNTY_NAME

示例数据:

STATE_ID   STATE_ABBREV   STATE_NAME
01         AL             Alabama
02         AK             Alaska

COUNTY_ID  STATE_ID       COUNTY_NAME
001        01             Nowhere
003        01             Somewhere
100        02             Other

状态表的主键是STATE_ID
您的县表的主键是COUNTY_ID --- AND ---- STATE_ID(COMBINED)

使用这种结构,您只有2个表,您可以使用它们轻松地重现原始的“大”表,以及“完整代码”字段。此外,基于此(更简单/更正常)的结构,更新,查询,创建过程,功能等将变得更加容易。

FWIW

答案 1 :(得分:1)

如果您使用Oracle,您可以创建一个PL-SQL过程,您可以在其中创建所有不同表中的第一个,然后您只需将数据填充到最近创建的新表中。 如果你使用PL SQL程序,你可以这样做。

另一方面,您可以创建不同的表,并在插入之前创建触发器,并且在插入主表之前将数据插入特定的表中。

对不起我的英语我希望你能理解所有并帮助你。