MySQL & MSSQL 中的自動增長字段的不同 博客分类: 數數 據據 庫庫 MySQLSQL ServerSQLBlog工作
程序员文章站
2024-02-04 23:39:52
...
表test中有一字段keyid int 自增長類型
MySQL:
在insert & update 的語句中
上述語句可以正常執行!
MSSQL:
上述情況就會出錯! 異常的信息大概意思是:在insert & update 語句中不能用到keyid(自動增長字段)!
第一次補充:
在MSSQL中產生上述錯誤。經我在網上一番搜掠之後! 是因爲我沒有把IDENTITY_INSERT 設為 ON .
不過可惜的是.我把IDENTITY_INSERT 設為 ON了,但是在insert數據時還是報同樣的錯誤!天啊!HELP ME~ME~ME!
第二次補充:
如果要把IDENTITY_INSERT 設為 ON生效! 就要在insert & update語句前執行!
在MSDN中找到:
當我打字打到這裡的時候.我突然想起我所說的已經偏離了我一開始所要講的.不過,無關係!我的BLOG,我話事!
在MSSQL中所謂的顯式:
當keyid最大值是99時!平且沒有一條記錄keyid == 0;
那麽這兩條語句將會成功插入!其中keyid == 100 & keyid == 0
OK!我們將環境轉去MySQL:
當keyid最大值是99時!平且沒有一條記錄keyid == 0;
那麽這兩條語句將會成功插入!但是結果與MSSQL有所不同!
執行完第一條語句時:將產生一條keyid == 100的紀錄.
執行完第二條語句時:產生了一條keyid == 101的紀錄.
MySQL:
在insert & update 的語句中
insert into test(keyid)values(100); update test set keyid = 101;
上述語句可以正常執行!
MSSQL:
insert into test(keyid)values(100); update test set keyid = 101;......
上述情況就會出錯! 異常的信息大概意思是:在insert & update 語句中不能用到keyid(自動增長字段)!
Cannot insert explicit value for identity column in table 'test' when IDENTITY_INSERT is set to OFF.........
第一次補充:
在MSSQL中產生上述錯誤。經我在網上一番搜掠之後! 是因爲我沒有把IDENTITY_INSERT 設為 ON .
引用
语法
SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }
参数
database
是指定的表所驻留的数据库名称。
owner
是表所有者的名称。
table
是含有标识列的表名。
SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }
参数
database
是指定的表所驻留的数据库名称。
owner
是表所有者的名称。
table
是含有标识列的表名。
不過可惜的是.我把IDENTITY_INSERT 設為 ON了,但是在insert數據時還是報同樣的錯誤!天啊!HELP ME~ME~ME!
第二次補充:
如果要把IDENTITY_INSERT 設為 ON生效! 就要在insert & update語句前執行!
在MSDN中找到:
引用
不論何時,工作階段中只能有一份資料表將
IDENTITY_INSERT 屬性設為 ON。如果已有資料表的這個屬性設為 ON,又針對另一份資
料表發出 SET IDENTITY_INSERT ON 陳述式,SQL Server 2005 會傳回一則錯誤訊
息,指出 SET IDENTITY_INSERT 已設為 ON,且會報告設為 ON 所針對的資料表。
如果輸入的值大於資料表目前的識別值,SQL Server 會自動利用新插入的值來作為目前的識別值。
SET IDENTITY_INSERT 的設定是在執行階段進行設定,而不是在剖析階段進行設定。
IDENTITY_INSERT 屬性設為 ON。如果已有資料表的這個屬性設為 ON,又針對另一份資
料表發出 SET IDENTITY_INSERT ON 陳述式,SQL Server 2005 會傳回一則錯誤訊
息,指出 SET IDENTITY_INSERT 已設為 ON,且會報告設為 ON 所針對的資料表。
如果輸入的值大於資料表目前的識別值,SQL Server 會自動利用新插入的值來作為目前的識別值。
SET IDENTITY_INSERT 的設定是在執行階段進行設定,而不是在剖析階段進行設定。
當我打字打到這裡的時候.我突然想起我所說的已經偏離了我一開始所要講的.不過,無關係!我的BLOG,我話事!
在MSSQL中所謂的顯式:
insert into test(keyid)values(100); insert into test(keyid)values(0);.....
當keyid最大值是99時!平且沒有一條記錄keyid == 0;
那麽這兩條語句將會成功插入!其中keyid == 100 & keyid == 0
OK!我們將環境轉去MySQL:
insert into test(keyid)values(100); insert into test(keyid)values(0);.....
當keyid最大值是99時!平且沒有一條記錄keyid == 0;
那麽這兩條語句將會成功插入!但是結果與MSSQL有所不同!
執行完第一條語句時:將產生一條keyid == 100的紀錄.
執行完第二條語句時:產生了一條keyid == 101的紀錄.
下一篇: 如何学好面向对象?类写法的困惑