2013-03-27 92 views
4

如何使用OpenRowSet將數據插入空白文件?如何使用OpenRowSet將數據插入空白文件?

我需要插入一個txt文件(比如說到d:\ TDB)從數據庫中的一些選擇輸出(比如select * from sys.tables

INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Text;Database=D:\TDB;HDR=Yes;', 'SELECT * FROM sys.tables.txt') 
select * from sys.tables; 

我得到

OLE DB提供程序「MICROSOFT .JET.OLEDB.4.0「鏈接服務器」(空)「 返回的消息」Microsoft Jet數據庫引擎找不到 對象'sys.tables.txt'。請確保該對象存在,並且您的拼寫名稱爲 和路徑名稱正確。「

消息7350,級別16,狀態2,

1無法從OLE DB提供程序得到列信息 「MICROSOFT.JET.OLEDB.4.0」 鏈接服務器 「(空)」 。

出了什麼問題?

PS。請不要提出BCP解決方案,引起已經測試並不起作用每次,所以我會測試OPENROWSET現在..

+1

當我在我已經創建了相應的列標題模板文件過去做到了,那麼使用xp_cmdshell創建模板文件的新副本,並使用該副本轉儲並最終將填充的文件重命名爲其他內容(因爲我想記錄,所以我使用了時間戳p文件),使用xp_cmdshell爲下次執行騰出空間。 – 2013-03-27 18:31:38

+0

你確定,你的SQL Server能夠(有權限)寫入D:\ TDB嗎? 也許SQLCMD是您的一個選項:http://stackoverflow.com/questions/425379/how-to-export-data-as-csv-format-from-sql-server-using-sqlcmd – CeOnSql 2015-03-09 12:15:39

回答

0

@serhio,我測試下面的SQL:

INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Text;Database=D:\TDB;HDR=Yes;', 'SELECT * FROM sys.tables.txt') 
select * from sys.tables; 

我得到了一些測試結果

  1. 文件名不能包含「。」在裏面。
  2. HDR(標題行)不能用在這裏(sys.tables.txt→systables.txt)。(刪除)
  3. TXT文件必須存在。(創建它)
  4. 的第一行txt文件應該是您的源數據的所有列名稱。

SQL

INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Text;Database=D:\TDB;', 'SELECT * FROM systables.txt') 
select * from sys.tables; 

systables.txt

name,object_id,principal_id,schema_id,parent_object_id,type,type_desc,create_date,modify_date,is_ms_shipped,is_published,is_schema_published,lob_data_space_id,filestream_data_space_id,max_column_id_used,lock_on_bulk_load,uses_ansi_nulls,is_replicated,has_replication_filter,is_merge_published,is_sync_tran_subscribed,has_unchecked_assembly_data,text_in_row_limit,large_value_types_out_of_row,is_tracked_by_cdc,lock_escalation,lock_escalation_desc