SQL Server數據庫遠程查詢并批量導入數據
SQL Server數據庫遠程查詢并批量導入數據的方法是本文我們主要要介紹的內容,接下來就讓我們一起來了解一下這部分內容吧。
應用背景:
兩個數據庫的表結構相同,但表名前綴不一樣,現要保持原有的數據表的ID導過來不變。用數據庫批量導入/導出工具行不通,只能自己寫SQL語句。奈何有180多個表,手工寫肯定是累S個人。
解決辦法:
先用 OpenDataSource 遠程連接服務器,然后執行插入語句可行。其語句如下:
- truncatetableActUser
- SETIDENTITY_INSERTActUseron
- insertintoActUser(
- [ID],[PassWord],[UserName]
- )select
- [ID],[PassWord],[UserName]
- fromopendatasource('SQLOLEDB','datasource=DBSERVERIP;uid=sa;password=sa').TEST.dbo.ActUser
- SETIDENTITY_INSERTActUseroff
然后我想到用游標結合 sysobjects和syscolumns 來實現自動生成這樣的語句,其代碼如下:
- declaremycursorcursor
- for
- select[id],[name]fromdbo.sysobjectswheretype='U'
- openmycursor
- declare@tablenamesysname
- declare@tableidsysname
- fetchnextfrommycursorinto@tableid,@tablename--獲取表名
- while(@@fetch_status=0)
- begin
- print'--['+@tablename+']'
- --拼湊字段,將行轉為字符串--
- DECLARE@fieldsvarchar(8000)
- set@fields=''
- SELECT@fields=''+@fields+'],['+nameFROMsyscolumnsWHEREid=object_id(@tablename)ORDERBYcolid
- set@fields='['+STUFF(@fields,1,3,'')+']'
- --拼湊字段End--
- --print@fields
- /*******避免因字段過長而導致截斷情形********/
- print'truncatetable'+@tablename--清理數據
- print'SETIDENTITY_INSERT'+@tablename+'on'--可使自增長列轉為可插入數據,不用重新生成ID
- print'insertinto'+@tablename+'('
- print@fields
- print')select'
- print@fields
- print'fromopendatasource('
- +'''SQLOLEDB'',''datasource=DBServerIP;uid=sa;password=sa'').TEST.dbo.'
- +replace(@tablename,'Wait_','Has_')
- print'SETIDENTITY_INSERT'+@tablename+'off'
- printchar(13)--換行
- fetchnextfrommycursorinto@tableid,@tablename
- end
- closemycursor
- deallocatemycursor
將生成的SQL 語句放到查詢分析器里執行一下,生成SQL 語句,然后執行一下,就可以成功地批量導入數據了。
關于SQL Server數據庫遠程查詢并批量導入數據的方法就介紹到這里了,希望本次的介紹能夠對您有所收獲!
【編輯推薦】