台灣最大程式設計社群網站
線上人數
829
 
會員總數:239069
討論主題:185519
歡迎您免費加入會員
討論區列表 >> MS SQL >> 有關SET IDENTITY_INSERT 的問題
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
有關SET IDENTITY_INSERT 的問題
價值 : 20 QP  點閱數:12820 回應數:9

樓主

KUKU
門外漢
0 31
363 27
發送站內信

我要將某一DB的Table塞在我的TempTable中
insert into tempdb..tmp8
select * from CQ01..ac00h a
where a.ac_date>='2006/09/01' and a.ac_date<='2006/12/31'
SET IDENTITY_INSERT tempdb..tmp8 ON
已經有將IDENTITY_INSERT 設成ON了,為何還是不能INSERT,會出現以下訊息
伺服器: 訊息 8101,層級 16,狀態 1,行 1
位於資料表 'tempdb..tmp8' 的識別資料行其外顯值只有當使用了資料行清單且 IDENTITY_INSERT 為 ON 時才能指定。
因為Table的欄位數有可能會變動,所以我一定要用select * 來取出資料唷
我要如何作,才能將資料INSERT進去呢?謝謝~~

本篇文章發表於2007-11-21 23:10
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

花旗蔘
檢舉此回應
SET IDENTITY_INSERT tempdb..tmp8 ON
這行要放在最前面
本篇文章回覆於2007-11-22 10:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

KUKU
檢舉此回應
Dear,
我試過了,這句不管放在前面還是後面都不行耶
本篇文章回覆於2007-11-22 10:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

肉丸
檢舉此回應
請問花旗蔘大大..
SET IDENTITY_INSERT ON
這句指令主要用意是在做什麼的
因為平常用insert into <<select>>
都不會下到這個指令呀!為什麼kuku大大就要呢
是他的資料表的結構有那裡比較不一樣嗎??

因為不懂..所以順便借用一下kuku大大的版問囉..別見怪呀!
本篇文章回覆於2007-11-22 10:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

花旗蔘
檢舉此回應
位於資料表 'tempdb..tmp8' 的識別資料行其外顯值只有當使用了資料行清單且 IDENTITY_INSERT 為 ON 時才能指定。
問題可能在”資料行清單”
所以try改一下 "select *" 把*換成指定的欄位
本篇文章回覆於2007-11-22 10:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

花旗蔘
檢舉此回應
Q:
SET IDENTITY_INSERT ON
這句指令主要用意是在做什麼的
因為平常用insert into <<select>>
都不會下到這個指令呀!為什麼kuku大大就要呢
是他的資料表的結構有那裡比較不一樣嗎??
ans:你說對了,就是資料表的結構,裡面有識別資料行(IDENTITY) 
  要特別指定識別值時,要SET IDENTITY_INSERT 該TABLE ON 再INSERT

本篇文章回覆於2007-11-22 10:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

花旗蔘
檢舉此回應
修正一下:要改的是 insert into 後面那段才對
insert into tempdb..tmp8(※請指定欄位)
select * from CQ01..ac00h a
……………
本篇文章回覆於2007-11-22 11:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

KUKU
檢舉此回應
Dear
但是我一定要下select * 耶,因為Table有可能會變動,所以欄位也不固定
還有別的方法可以將我的資料塞入這個Temptable中嗎??
謝謝~~
本篇文章回覆於2007-11-22 11:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
最有價值解答

花旗蔘
檢舉此回應
insert into tempdb..tmp8(※請指定欄位)
本篇文章回覆於2007-11-22 11:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

黃佳鴻
檢舉此回應
IDENTITY_INSERT(自動編號會產生流水號的開關之類的)

假如你要insert的表 有一個SYS_ID 是流水編號
你用select *去建temp表
這個temp表 就會發現你的SYS_ID是自動編號

你後面INSERT 時 又想硬塞SYS_ID
微軟當然直接警告你 「 IDENTITY_INSERT 為 ON 」你有欄位是要自動編號 為啥要塞你給的SYS_ID
----
處理方法 就是 SELECT 0 SYS_ID
就是上面講的※請指定欄位
重點是 指定欄位也麻煩SYS_ID設定成0
本篇文章回覆於2017-03-02 10:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.