執行循環, 複製遠程數據庫數據到本地時,怎樣動態改變set identity_insert tableName on中的表名(tableName)?我試了用游標取回表名賦給@tableName
再執行 set identity_insert @tableName on 但出錯
exec (‘set identity_insert’+ @tableName +’on’)也不行,這部份該怎樣寫?從遠程數據庫複製數據到本地數據庫有什麼好方法?(sql server 2005 到sql server 200)

解决方案 »

  1.   

    1远程表先导入临时表里
    2通过sql语句挑出想要的数据,导到目的表
      

  2.   

    因為遠程數據庫和本地數據庫結構是一樣的,我現在要做的是用一個循環把遠程所有表的所有數據複製到本地,因為有些表有identity設置,插入時要設 set identity_insert tableName on,但怎樣用動態改變表名(tableName)呢?
      

  3.   

    任何时候,会话中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON。如果某个表已将此属性设置为 ON,并且为另一个表发出了 SET IDENTITY_INSERT ON 语句,则 Microsoft® SQL Server™ 返回一个错误信息,指出 SET IDENTITY_INSERT 已设置为 ON 并报告此属性已设置为 ON 的表。
      

  4.   

    先将前表set identity_insert tableName OFF
      

  5.   

    declare @tb sysname
    set @tb = 'tablename'
    exec('set identity_insert ' + @tb + ' on')
      

  6.   

    JoeYoung2008() 
       謝謝提醒,script中有設off,我想問的是 hellowork(一两清风) 這個方面的答案.hellowork(一两清风)
       謝謝你回復,不過你寫的代碼 exec('set identity_insert ' + @tb + ' on')  是不能執行的,我就是用你寫的方法,但會在exec('set identity_insert ' + @tb + ' on')這行報錯.
    我的為:
    exec('set identity_insert '+@fromPart + ' on')
    go insert into yar(id,name,...) select * from [遠程地址].myDB.dbo.yar exec('set identity_insert '+@fromPart + ' off')
    go
      

  7.   

    使用EXEC()时,set语句只限于EXEC期间生效,EXEC之后就失效了.楼主必须把insert语句也封装到SQL字符串中,然后EXEC该字符串.例如:declare @fromPart sysname
    set @fromPart = 'tbName'
    declare @sql varchar(1000)
    set @sql = 'set identity_insert '+@fromPart + ' on 
    insert into yar(id,name,...) select * from [遠程地址].myDB.dbo.yar
    set identity_insert '+@fromPart + ' off'
    EXEC(@sql)
      

  8.   

    還是有點問題:總報錯(本地的表我都建了)連接遠程數據庫后declare @tableName sysname, @i int,@SqlComm nvarchar(1000),@tableFullName nvarchar(100);declare cur_GetTableName cursor for
    select name from sysobjects where xtype='u' 
    open cur_GetTableNamefetch cur_GetTableName into @tableName
    while(@@fetch_status=0)
    begin
    set @tableFullName='[遠程地址].myDB.dbo.'+@tableName
    set @Sqlcomm ='set identity_insert ' +@tableName + ' on
    go
    insert into  '+@tableName+'  select * from  '+@tableFullName+'
    set identity_insert  '+@tableName + '  off
    go'
    EXEC (@Sqlcomm)
    fetch cur_GetTableName into @tableName
    endclose cur_GetTableName
    deallocate cur_GetTableName
    go