bcp+Sql语句抽取数据导出
最近由于項目的需求,需要將項目數據庫中的數據按照一定的規則抽取出來,然后再導入到另外一個結構相同的數據庫中;之前也使用過bcp的功能,但是只使用bcp將整個表的數據導入到一個csv文件中,查看了一下bcp命令的參數,發現bcp命令后面可以加sql語句,然后帶上-queryout參數,就可以按照自己的邏輯將數據抽取出來,然后導入到csv文件中了,但是在實際使用中還是遇到了不少的困難,經過多次嘗試,最終還是得以完成了,也積累了如下幾個小經驗。
? 一、bcp命令可以直接在Command窗口運行,你可以單擊開始菜單-運行-cmd-進入Command窗口,然后輸入你編寫好的bcp語句
? 二、可以調用系統存儲過程master..xp_cmdshell來調用bcp命令
? 三、如果需要使用master..xp_cmdshell存儲過程,需要先打開sqlserver的xp_cmdshell功能,可以進入sqlserver外圍配置管理器-功能配置管理器-選中xp_cmdshell-開啟。也可以通過執行sql語句的方式打開xp_cmdshell功能,如下:
? USE master?
? EXEC sp_configure 'show advanced options', 1
? RECONFIGURE WITH OVERRIDE
? EXEC sp_configure 'xp_cmdshell', 1???? --1,開啟;0,關閉
? RECONFIGURE WITH OVERRIDE
???????
? 四、調用master..xp_cmdshell調用bcp時,整個bcp命令要放在單引號內作為master..xp_cmdshell存儲過程的參數,如:
?? exec master..xp_cmdshell 'bcp sql語句 -queryout d:\test.csv -Usa -Ppassword -S127.0.0.1 -c '
? 五、sql語句中涉及的表名,必須用數據庫.擁有者.表名的格式,如SchoolDataBase.dbo.School
??????六、sql語句需要放在雙引號內,而在實際應用時,單引號和雙引號太多,而且嵌套,還是需要變化一下,采用字符串連接的方式,如:
?? ?"exec master..xp_cmdshell 'bcp \""+sql語句+"\"? -queryout d:\test.csv -Usa -Ppassword -S127.0.0.1 -c'"
? 七、sql語句不可以有回車換行符,這個是折騰我半天時間才發現的,沒辦法,只能再曲線救國,于是出現了如下的sql語句:
?? "exec master..xp_cmdshell 'bcp \""+sql語句.Replace("\r\n"," ")+"\"? -queryout -Usa -Ppassword -S127.0.0.1 -c'"
?
這樣,將上面語句作為一條sql語句放在sqlCommand中進行執行即可。
? ? 經過上述一番折騰,終于可以抽取數據導出了。
?
轉載于:https://www.cnblogs.com/RascallySnake/archive/2010/11/17/1880287.html
總結
以上是生活随笔為你收集整理的bcp+Sql语句抽取数据导出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用Attribute扩展MVC的Tit
- 下一篇: 创建oracle数据库