當 IDENTITY_INSERT 設定為 OFF 時,不能為表中的識別欄位插入顯式值(轉)

來源:互聯網
上載者:User

標籤:

{"當 IDENTITY_INSERT 設定為 OFF 時,不能向表 ‘OrderList‘ 中的識別欄位插入顯式值"}

對於這個異常可以從兩個角度來處理:A:資料庫執行語句  B:直接修改NHibernate中持久化類映射設定檔id節點

A資料庫執行語句:

問題描述:當在資料庫表主鍵設計為 (Orderid  int identity primary key),相對這個主鍵IDENTITY_INSERT預設設定為OFF,就是不能夠顯示插入主鍵id的值,例子如下:

insert into OrderList(id,OrderName) values(4520,‘電子傳票訂單‘)

執行上面語句會提示一個錯誤:

伺服器: 訊息 544,層級 16,狀態 1,行 1
當 IDENTITY_INSERT 設定為 OFF 時,不能向表 ‘OrderList‘ 中的識別欄位插入顯式值。

其中關於主鍵一條記錄,當我們想把這條記錄的id設定成我們自訂的4520時出現上面的錯誤,如果我們添加一些設定,修改方法如下:

--允許將顯式值插入表的識別欄位中 ON-允許  OFF-不允許
set identity_insert OrderList ON--開啟

insert into OrderList(id,ordername,createdate)
values(4520,‘set‘,getdate())

set identity_insert OrderList OFF--關閉

在執行這個插入語句時多了一個設定,該設定的文法是

--設定文法:

SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF } 
允許將顯式值插入表的識別欄位中

參數說明:
database:針對資料庫
table:針對某張表

ON:允許插入顯式值插入 識別欄位
OFF:不允許

注意:


--問題注意

(1)任何時候,會話中只有一個表的 IDENTITY_INSERT 屬性可以設定為 ON。如果某個表已將此屬性設定為 ON,並且為另一個表發出了 SET IDENTITY_INSERT ON 語句,則 Microsoft® SQL Server™ 返回一個錯誤資訊,指出 SET IDENTITY_INSERT 已設定為 ON 並報告此屬性已設定為 ON 的表

(2)如果插入值大於表的當前標識值,則 SQL Server 自動將新插入值作為當前標識值使用

(3)SET IDENTITY_INSERT 的設定是在執行或運行時設定,而不是在分析時設定

上面執行語句中:把要執行的語句前後加上該設定,當然上面針對事一條記錄插入操作,在這條記錄插入操作後,如果再次插入資料時,沒有啟用該設定,Orderid主鍵列會根據上面自訂表格示4520,自動成長到4521.這個操作很靈活關鍵看個人怎麼利用.

B:修改設定檔

我們通過直接修改設定檔來處理這個問題,

出錯時檔案配置:

--hibernate持久化類配置 注意id中Generator子節點設定Class屬性為:assigned自動成長
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <class name="TestHibernateExpre.Entities.OrderListModel,TestHibernateExpre" table="OrderList">
        <id name="Orderid" column="id" type="int">
            <!--id中參數的設定問:native/assigned/foreign/increment-->
            <generator class="assigned"></generator>
        </id>
    </class>

修改後檔案配置:

--Hibernate中關於持久化類的配置  注意id下Generator子節點 class屬性配置為native
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <class name="TestHibernateExpre.Entities.OrderListModel,TestHibernateExpre" table="OrderList">
        <id name="Orderid" column="id" type="int">
            <!--id中參數的設定問:native/assigned/foreign/increment-->
            <generator class="native"></generator>
        </id>
      </class> 轉自:http://blog.sina.com.cn/s/blog_7eecafbc0100rax7.html轉自:http://www.cnblogs.com/chenkai/archive/2009/04/13/1434606.html

當 IDENTITY_INSERT 設定為 OFF 時,不能為表中的識別欄位插入顯式值(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.