我有問題想知道如何使用預存程序將數據從 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 文件中, 我不知道如何解決這個問題, 有大大知道如何解決它?
Excel是實體檔案,寫入權限跟你的所在資料夾權限有關。
跟程式碼沒有關係~
我以前有做過讀取的功能,沒做過寫入功能。
但讀取時,檔案一定要在SQL Server本機上。
不知道是不是這個原因。
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要有相同的欄位名稱
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成功
他這句【無法更新。資料庫或物件是唯讀的】
通常是資料夾(或磁碟機根所在位置),使用者帳戶(SQL Server)權限不足(未設定寫入權限)
我之前的經驗是,如果當下Excel檔案本身是開啟中,也是相同的錯誤訊息。
1.開啟 SSMS 執行以下程式碼
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
2.如圖,全部勾選;【需要重新啟動服務器才能使新配置值生效】
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
已經安裝,但是有同樣的錯誤
你的 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