因為客戶的懶惰,
雖然我們做了後台輸入畫面
但是客戶還是要求我們把A資料庫的東西自動帶到B資料庫
雖然客戶懶惰,但工程式更不勤勞
怎麼可能用我寫好的輸入介面一筆一筆新增XD
是我們的系統做的不好嗎?
不對!!!!!!絕對不是這樣的!!!!!
是我知道insert select這個指令!!!
insert into B.dbo.Employee (Id, Name) select Id, Name from A.dbo.Employee
這樣不就方便多了
但如果PK遇到自動增加的流水號
就會遇到下列錯誤訊息
Cannot insert explicit value for identity column in table 'Employee' when IDENTITY_INSERT is set to OFF.
意思是說:不能在 IDENTITY_INSERT OFF 的情況下新增 IDENTITY的欄位
反過來說,在 IDENTITY_INSERT ON 的情況下就可以新增 IDENTITY的欄位嗎?
沒錯!! 就是這樣
因此,如果要手動新增自動識別的值,必須像下面這樣
SET IDENTITY_INSERT B.dbo.Employee ON insert into B.dbo.Employee (Id, Name) select Id, Name from A.dbo.Employee SET IDENTITY_INSERT B.dbo.Employee OFF
不過這個有個缺點,就是不能使用 insert into ... select *
必須把要新增的欄位全部寫出來,其實還蠻麻煩的
至於在甚麼情況下需要這樣呢?
為什麼不讓B的Employee資料的主鍵自動新增呢?
因為有
自動新增的話會找不到主檔的PK
但自動新增主鍵的情況下也不是完全沒解
只是比較麻煩,要先取得新增的流水號在insert到detail
所以....嗯哼
下回預告:新增後取得自動產生的流水號
沒有留言:
張貼留言