使用osql.exe, 将Select的内容保存为文件
生活随笔
收集整理的這篇文章主要介紹了
使用osql.exe, 将Select的内容保存为文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
需求描述:
??? 需要將數據庫的某個表格的內容以文件的形式保存起來。
常規做法:
??? 寫一個sql 語句 (select * from test),然后通過ADO,或者SqlDataReader等執行該語句,最后拼湊要保存到文件中的內容,并寫入文件。
新的方法:
??? 寫一個.bat文件,文件的內容為:
osql /U UserAccount/P Password /d?Database /S?Sever /Q "SELECT * from test " -o "E:\Documents and Settings\asa yuan\Desktop\test.txt" -u -w 2000? -n -s '-' -h-1?
其它說明:
??? 該Sql語句可做相應的調整,以適應Xml格式:
方式一:
SELECT 123 AS Tag,
?0 As Parent,
??omfid?? As [eachObj!123!objId!element],
??rtrim(omfname)?? As [eachObj!123!objName!element],
?rtrim(omfdesc)?? As [eachObj!123!objDesc!element],
??rtrim(omfkeyword)?? As [eachObj!123!objKey!element],
??rtrim(omfremark)?? As [eachObj!123!objRem!element] FROM acmomf
where omfname like '%test%'
FOR XML explicit
方式二:
??? SELECT top 1000 '<eachObj>','<objId>' + omfid + '</objId>' ,rtrim('<objName>' + rtrim(omfname) + '</objName>'),'<objDesc>' + rtrim(omfdesc) + '</objDesc>' ,'<objKey>' + rtrim(omfkeyword) + '</objKey>' ,'<objRem>' + rtrim(omfremark) + '</objRem>','</eachObj>' from acmomf
補充說明:
??? 1. 使用osql命令,無法將最后的(1000 rows affected)不顯示。
??? 2.無法改變欄位與欄位間的空格,默認以該欄位的最大長度為準(估計是SQL Server 為了模擬表格的顯示)
??? 3.Osql和For xml explicit的具體用法,請參照SQL Server的幫助
再補充說明:
在DTS設計器中,如果將一個表的內容導出到文本文件中,其默認的字段長度都是256. 而直接通過DTS向導是不會有這種問題發生。
這樣就可能產生這種情況: 表的字段長度是nvarchar(2000),導出來之后就被截成nvarchar(256)
另外在DTS編輯器中, 即使你把它改為了nvarchar(2000),也一定要記得勾選"Binary"選項
【最后再補充】
osql其實不是用在這的, 使用DTS的編輯器,可以實現強大的功能:)?
但在2005之后, 我覺得Biztalk應該采用的是類似DTS的思路設計的:)?
??? 需要將數據庫的某個表格的內容以文件的形式保存起來。
常規做法:
??? 寫一個sql 語句 (select * from test),然后通過ADO,或者SqlDataReader等執行該語句,最后拼湊要保存到文件中的內容,并寫入文件。
新的方法:
??? 寫一個.bat文件,文件的內容為:
osql /U UserAccount/P Password /d?Database /S?Sever /Q "SELECT * from test " -o "E:\Documents and Settings\asa yuan\Desktop\test.txt" -u -w 2000? -n -s '-' -h-1?
其它說明:
??? 該Sql語句可做相應的調整,以適應Xml格式:
方式一:
SELECT 123 AS Tag,
?0 As Parent,
??omfid?? As [eachObj!123!objId!element],
??rtrim(omfname)?? As [eachObj!123!objName!element],
?rtrim(omfdesc)?? As [eachObj!123!objDesc!element],
??rtrim(omfkeyword)?? As [eachObj!123!objKey!element],
??rtrim(omfremark)?? As [eachObj!123!objRem!element] FROM acmomf
where omfname like '%test%'
FOR XML explicit
方式二:
??? SELECT top 1000 '<eachObj>','<objId>' + omfid + '</objId>' ,rtrim('<objName>' + rtrim(omfname) + '</objName>'),'<objDesc>' + rtrim(omfdesc) + '</objDesc>' ,'<objKey>' + rtrim(omfkeyword) + '</objKey>' ,'<objRem>' + rtrim(omfremark) + '</objRem>','</eachObj>' from acmomf
補充說明:
??? 1. 使用osql命令,無法將最后的(1000 rows affected)不顯示。
??? 2.無法改變欄位與欄位間的空格,默認以該欄位的最大長度為準(估計是SQL Server 為了模擬表格的顯示)
??? 3.Osql和For xml explicit的具體用法,請參照SQL Server的幫助
再補充說明:
在DTS設計器中,如果將一個表的內容導出到文本文件中,其默認的字段長度都是256. 而直接通過DTS向導是不會有這種問題發生。
這樣就可能產生這種情況: 表的字段長度是nvarchar(2000),導出來之后就被截成nvarchar(256)
另外在DTS編輯器中, 即使你把它改為了nvarchar(2000),也一定要記得勾選"Binary"選項
【最后再補充】
osql其實不是用在這的, 使用DTS的編輯器,可以實現強大的功能:)?
但在2005之后, 我覺得Biztalk應該采用的是類似DTS的思路設計的:)?
轉載于:https://www.cnblogs.com/yuanliding_1/archive/2005/03/07/114600.html
總結
以上是生活随笔為你收集整理的使用osql.exe, 将Select的内容保存为文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: u盘显示禁止访问怎么办 解决U盘禁止访问
- 下一篇: 偶最近换了嗜睡症.