欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL & MSSQL 中的自動增長字段的不同 博客分类: 數數 據據 庫庫 MySQLSQL ServerSQLBlog工作 

程序员文章站 2024-02-04 23:39:52
...
表test中有一字段keyid  int 自增長類型
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

是含有标识列的表名。


    不過可惜的是.我把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 的設定是在執行階段進行設定,而不是在剖析階段進行設定。



     當我打字打到這裡的時候.我突然想起我所說的已經偏離了我一開始所要講的.不過,無關係!我的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的紀錄.