2013-03-09 92 views
0

我在MySQL中拥有这些表结构,并根据我的要求工作正常。在SQL Server 2005中将外键设为自动增量

CREATE TABLE `ebasic` (<br> 
`eid` int(11) NOT NULL AUTO_INCREMENT, <br> 
`d_id` int(11) NOT NULL, <br> 
`pos` varchar(50) DEFAULT NULL, <br> 
`hdd` varchar(5) DEFAULT NULL, <br> 
`hmm` varchar(10) DEFAULT NULL, <br> 
`hyy` varchar(5) DEFAULT NULL, <br> 
`fname` varchar(25) DEFAULT NULL, <br> 
`lname` varchar(25) DEFAULT NULL, <br> 
`bdd` varchar(5) DEFAULT NULL, <br> 
`bmm` varchar(10) DEFAULT NULL, <br> 
`byy` varchar(5) DEFAULT NULL, <br> 
`gender` varchar(10) DEFAULT NULL, <br> 
`addr` varchar(100) DEFAULT NULL, <br> 
`city` varchar(25) DEFAULT NULL, <br> 
`state` varchar(25) DEFAULT NULL, <br> 
`pin` varchar(10) DEFAULT NULL, <br> 
`country` varchar(25) DEFAULT NULL, <br> 
`tel` varchar(25) DEFAULT NULL, <br> 
`mobile` varchar(25) DEFAULT NULL, <br> 
`email` varchar(30) DEFAULT NULL, <br> 
`qual` varchar(30) DEFAULT NULL, <br> 
PRIMARY KEY (`eid`));<br> 



CREATE TABLE `eaccount` (<br> 
`eid` int(11) NOT NULL AUTO_INCREMENT, <br> 
`d_id` int(11) NOT NULL, <br> 
`accno` varchar(20) DEFAULT NULL, <br> 
`pan` varchar(15) DEFAULT NULL, <br> 
`passport` varchar(15) DEFAULT NULL, <br> 
`visa` varchar(15) DEFAULT NULL, <br> 
`type` varchar(20) DEFAULT NULL, <br> 
KEY `eid` (`eid`), <br> 
FOREIGN KEY (`eid`) REFERENCES `ebasic` (`eid`) ON DELETE CASCADE); <br> 

因此,列eidebasic主键和eaccount外键,这样如果行从ebasic删除,它会从eaccount删除过,因为ON DELETE CASCADE

但是,他们两人都是自动递增列,也因此当行插入ebasic成功,相应的行与eid一样ebasic插入eaccount有自动递增数相同。

现在,我试图将我的数据库迁移到SQL Server,我在那里的自动增量是IDENTITY(seed, increment)。但是,我不能在SQL Server中将外键作为auto_increment,但在MySQL中它是可能的。请帮忙 !!

+2

你不能在MS SQL中这样做,你可以试试这个 - 首先在ebasic中插入一行,然后插入行eid并将其插入到eaccount表中。 – 2013-03-09 05:38:29

+0

因为我必须折射整个项目代码,它会花费很多时间做到这一点.... – user2150770 2013-03-09 05:41:07

+0

这整个设计看起来像一个非常糟糕的主意....如果在ebasic和eaccount中自动递增'突然不同步?这不是一个非常可靠的方法去!你需要插入'ebasic',然后获取你得到的任何'eid',然后将**写入'eaccount' - 其他任何东西都是kludge .... – 2013-03-09 09:28:14

回答

3

在SQL Server中,您不能使用自动递增选项创建外键并设置级联删除选项,如果您要在一个表中插入一行,您可以获取插入的行ID并将其用于存储在引用该键的其他表中,例如:

declare @idtable table (id int); 


insert into ebasic (d_id, pos ......) 
OUTPUT Inserted.eid INTO @idTable 
values (1,2,...); 

declare @eid int 
select eid = id from @idTable; 

insert into eaccount (eid, d_id...) 
values (@eid, 1,...);