熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

在標識列裡插入特定的值

2013-11-13 15:43:08  來源: Oracle 

  盡管你可以對標識列(identity column)的值及其任意值的用處有千條萬條理由但是和你共同工作的一些人會堅持在給定的表格裡使用連續的主關鍵字(PK)然後當發票號丟失的時候他們就會恐慌害怕被起訴掩蓋錯誤甚至更糟
  
  為了解決這個問題你可以創建一個帶有標識列的表格並用一些數據行來填充它
  
   Create a test table
  CREATE TABLE TestIdentityGaps
    (
      ID int IDENTITY PRIMARY KEY
      Description varchar()
    )
  GO
   Insert some values The word INTO is optional:
  INSERT [INTO] TestIdentityGaps (Description) VALUES (One)
  INSERT [INTO] TestIdentityGaps (Description) VALUES (Two)
  INSERT [INTO] TestIdentityGaps (Description) VALUES (Three)
  INSERT [INTO] TestIdentityGaps (Description) VALUES (Four)
  INSERT [INTO] TestIdentityGaps (Description) VALUES (Five)
  INSERT [INTO] TestIdentityGaps (Description) VALUES (Six)
  GO
  
  現在刪除幾個數據行
  
  DELETE TestIdentityGaps
  WHERE Description IN(Two Five)
  
  在我們編寫代碼的時候我們知道二(Two)五(Five)這兩個值丟了我們想要插入兩個數據行來填補這些空缺兩個簡單的INSERT陳述式無法滿足要求但是它們會在序列的結尾創建主關鍵字
  
  INSERT [INTO] TestIdentityGaps (Description) VALUES (Two Point One)
  INSERT [INTO] TestIdentityGaps (Description) VALUES (Five Point One)
  GO
  SELECT * FROM TestIdentityGaps
  
  你也無法明確地設置標識列的值
  
   Try inserting an explicit ID value of Returns a warning
  INSERT INTO TestIdentityGaps (id Description) VALUES( Two Point One)
  GO
  
  為了解決這個問題SQL服務器用IDENTITY_INSERT來進行設置為了強行插入一個帶有特定值的數據行你需要發出命令然後在後面接上具體插入的內容
  
  SET TestIdentityGapsON
  INSERT INTO TestIdentityGaps (id Description) VALUES( Two Point One)
  INSERT INTO TestIdentityGaps (id Description) VALUES( Five Point One)
  GO
  SELECT * FROM TestIdentityGaps
  
  現在你可以看到新的數據行已經用指定的主關鍵字值插入了
  
  注意對IDENTITY_INSERT的設置可以在任何特定的時候用在數據庫裡的某個表格上如果需要在一個或者多個表格裡填補空缺你就必須用具體的命令來明確地指明每個表格
  
  你可以在一個帶有標識列的表格裡插入一個具體的值但是要這樣做的話你必須首先把IDENTITY_INSERT的值設置為ON如果你沒有你就會看到一條錯誤消息即使你把IDENTITY_INSERT的值設置為了ON但是如果再插入一個已有的值的話你還是會看到錯誤消息
From:http://tw.wingwit.com/Article/program/Oracle/201311/17183.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.