none
在程式開發時使用SET IDENTITY_INSERT似乎無效?

    問題

  • 各位先進,您好:

     

    想請問有關於在程式裡加上 SET IDENTITY_INSERT  的作法?

     

    tg_d這個table有建立識別,識別欄位是COUNTER int

    若是在QUERY或SSMS下 SET IDENTITY_INSERT [123].[dbo].[tg_d]  ON 是有效的,則可 :

    insert into tg_d (counter)
    values ('1')

     

    但是在VB裡,引用SQLDMO,例如:
       SQL1 = "SET IDENTITY_INSERT tg_d on"
       oSqlServer.Databases(資料庫名稱).ExecuteImmediate SQL1 

    是有通過並沒有顯示出失敗的,但是再到QUERY或SSMS去INSERT資料時

    insert into tg_d (counter)
    values ('2')

    則會出現錯誤:

    當 IDENTITY_INSERT 設為 OFF 時,無法將外顯值插入資料表 'tg_d' 的識別資料行中。

     

    我想說那先寫好一段PROC,再給VB呼叫好了,可是我先用以下方式測試時,發現仍是無效的:

    in QUERY:

    DECLARE @command nvarchar(4000)
    DECLARE @資料庫 varchar(100)
    DECLARE @表格 varchar(50)
    set @資料庫='123'
    set @表格='tg_d'
     SET @command =N'SET IDENTITY_INSERT ' +N'[' + @資料庫 + N'].[dbo].[' + @表格 + N'] ' + ' ON'
     EXEC (@command)

    執行以上整段仍無錯誤,但是INSERT資料時還是發現他是OFF,不可插入......

     

    好像就是說,必須在SSMS或是QUERY直接執行一行SET IDENTITY_INSERT [123].[dbo].[tg_d]  ON

    才會有效,其他方式執行都是沒有錯誤但實際上是沒有成功的

     

    麻煩各位先進指導,謝謝~

     

    PS1:用這個方式主要是為了寫轉檔,table需有識別,但轉進來的資料必須保留,轉完才啟用識別,也有用BCP大量匯入的方式做過,但是會有其他問題,所以還是想說用一筆筆轉入的方式。

     

    PS2:SqlServer 2005 及 SqlServer 2000都有遇到此問題,開發系統我是用vb6.0及VB.NET也都一樣

     

    謝謝大家

     

     

    小腸

    97.11.27

    2008年11月27日 上午 03:43

解答

  • It's effective in current session only, that means SET and INSERT have to be in same session. 

     

    • 已標示為解答 Lolota Lee 2009年2月25日 上午 07:40
    2008年11月27日 下午 10:25

所有回覆