iT邦幫忙

0

如何使用預存程序導出sql server table數據到新的 Excel 文件

  • 分享至 

  • xImage

我有問題想知道如何使用預存程序將數據從 sql server table 數據導出到新的 excel 文件,
因為我嘗試編寫一個預存程序並插入到 Excel 文件中根本不起作用,它說錯誤,但我嘗試使用導出和導入嚮導沒有問題,成功插入excel文件.
錯誤:OLE DB provider "Microsoft.ACE.OLEDB.16.0" for linked server "(null)" returned message "無法更新。資料庫或物件是唯讀的。".

insert into openrowset('Microsoft.ACE.OLEDB.16.0','Excel 8.0;Database=C:\test.xslx;',
	'Select * From [Sheet1$]')
	Select * From tblTransaction

我知道這個 insert into 子句是插入到現有的 Excel 文件中, 我不知道如何解決這個問題, 有大大知道如何解決它?

天黑 iT邦研究生 5 級 ‧ 2023-08-14 16:07:48 檢舉
如果只是偶而要用 LINQPAD 有現成的export excel功能 只要你能連到db 呼叫SP 能顯示就能匯出
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
純真的人
iT邦大師 1 級 ‧ 2023-08-14 15:55:22

Excel是實體檔案,寫入權限跟你的所在資料夾權限有關。
跟程式碼沒有關係~

reborn iT邦新手 5 級 ‧ 2023-08-14 16:00:26 檢舉

如果我想將數據導出到新的Excel文件,那我預存程序那我該如何寫?

預存程序~我是沒寫過~因為我都用程式碼控制輸出@@..

0
allenlwh
iT邦高手 1 級 ‧ 2023-08-14 16:00:58

我以前有做過讀取的功能,沒做過寫入功能。
但讀取時,檔案一定要在SQL Server本機上。
不知道是不是這個原因。

allenlwh iT邦高手 1 級 ‧ 2023-08-14 23:00:26 檢舉

1.DB資料

CREATE TABLE [dbo].[test0814](
	[company] [nchar](20) NULL,
	[Doctype] [nchar](4) NULL,
	[Doccode] [nchar](4) NOT NULL	
) ON [PRIMARY]
GO

insert into test0814 values ('test_A','BB','CC')

2.Excel要有相同的欄位名稱
https://ithelp.ithome.com.tw/upload/images/20230814/20033493AdcBI3IY1K.jpg

3.SQL Script

INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;
Database=D:\保險.xlsx;','SELECT * FROM [test0814$]') 
SELECT [company]
      ,[Doctype]
      ,[Doccode] FROM [test0814]

4.Insert成功
https://ithelp.ithome.com.tw/upload/images/20230814/200334932qpUErHPfX.jpg

他這句【無法更新。資料庫或物件是唯讀的】
通常是資料夾(或磁碟機根所在位置),使用者帳戶(SQL Server)權限不足(未設定寫入權限)
https://ithelp.ithome.com.tw/upload/images/20230815/20061369C2HmLcePJB.png

allenlwh iT邦高手 1 級 ‧ 2023-08-15 09:10:23 檢舉

我之前的經驗是,如果當下Excel檔案本身是開啟中,也是相同的錯誤訊息。

3
rogeryao
iT邦超人 8 級 ‧ 2023-08-15 09:51:45

1.開啟 SSMS 執行以下程式碼

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;

2.如圖,全部勾選;【需要重新啟動服務器才能使新配置值生效】
https://ithelp.ithome.com.tw/upload/images/20230815/20085021bc421CYRC8.png

3.必要條件

a.必須有目的檔案 : Test.xlsx (<== 舉例)
b.Excel 內必須有目的工作表 : 工作表1 (<== 舉例)
C.Excel 內必須有目的欄位 : Equipment (<== 舉例)

4.執行

INSERT INTO OPENROWSET ('Microsoft.ACE.OLEDB.16.0', 'Excel 8.0;Database=d:\Temp\Test.xlsx;',
'SELECT * FROM [工作表1$]') SELECT Equipment FROM dbo.Table1
看更多先前的回應...收起先前的回應...
reborn iT邦新手 5 級 ‧ 2023-08-15 14:09:56 檢舉

The provider reported an unexpected catastrophic failure有這個錯誤

rogeryao iT邦超人 8 級 ‧ 2023-08-15 14:53:23 檢舉
reborn iT邦新手 5 級 ‧ 2023-08-15 15:28:53 檢舉

已經安裝,但是有同樣的錯誤

rogeryao iT邦超人 8 級 ‧ 2023-08-15 15:52:36 檢舉

你的 SQL Server 設定可能有問題,或許可以試試以下指令後重新開機 (15 要改成 16) :

USE [master] 

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.15.0', N'AllowInProcess', 1 GO 

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.15.0', N'DynamicParameters', 1 GO

參考來源 : The provider reported an unexpected catastrophic failure

我要發表回答

立即登入回答