2013-03-09 95 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,...);