最近工作會在Visual Studio 2013的VC中用到SQL語法與SQL SERVER 2008 R2資料庫做資料表的溝通與新增刪除修改,
遇到了當我想要用INSERT INTO一筆資料到資料表中卻不允許我新增的狀況,
一開始以為可以在原本語法指令前一同加上SET IDENTITY_INSERT HDCP_KEY ON 的方式解決,沒想到問題並不是這樣,
經過一天嘗試,突然想通,發現原來是因為資料表上的主鍵資料欄位Serial_No是屬於SQL系統自己累加的資料,
並不允許使用INSERT INTO去新增資料時加上這個Serial_No欄位,所以改了一下,
原本SQL語法是
sqlstr.Format("INSERT INTO HDCP_KEY (Serial_No,Box_SN,MB_SN,KeySet_No,Remark) VALUES ('','','%s','%s','')",mbsn,keyNo);
後來拿掉Serial_No改為,
sqlstr.Format("INSERT INTO HDCP_KEY (Box_SN,MB_SN,KeySet_No,Remark) VALUES ('','%s','%s','')",mbsn,keyNo);
這樣就可以解決了
順帶一提,VALUES之內的資料型態必須符合原本資料庫欄位的型態,否則也是一樣有問題無法新增,
之前可能是因為資料庫是Winxp x32+ SQL2005所以一樣的指令卻不會有這個問題
最近MIS協助把系統更新到Win7 x64 +SQL 2008 R2才遇到這樣的差別,
算是學到了一課......