當前位置:首頁 » 存儲配置 » excel存儲過程

excel存儲過程

發布時間: 2022-07-05 14:30:24

sql之前一直都沒有問題,幾天把Excel表導進去,執行存儲過程就出這樣子的錯了,什麼原因呢

你的存儲過程中做除法的地方,有除以0的情況發生
建議一步一步檢查下數據

② Excel導入數據的存儲過程出錯, 怎麼辦

你試試在你想要輸入數字的單元格里點擊右鍵,選擇『設置單元格格式』不要用常規,用文本就可以了 必須先改用文本在輸入數字

③ excel調用sql存儲過程 好用嗎

應該是這樣的吧 create proc Select_Tb_Infro @tableName varchar(200) as declare @sql varchar(max) set @sql='select * from '+@tableNameexec (@sql) 然後這樣執行 exec Select_Tb_Infro 'a' 引號里那個a換成你要查詢的表名

④ 如何將存儲過程返回的結果導出為Excel

SQL Server有一些工具可用來導出和導入數據。這些簡單的工具,例如T-SQL的BULK INSERT語句,或者是BCP工具,都可以將數據以純文本文件的形式傳輸。如果需要處理任何一種其他類型的文件的導入導出,則我們必須使用DTS設計器或者DTS向導構建一個DTS包。最終生成的DTS包是一個我們必須測試、維護和操作的獨立的對象。而傳輸數據的工作則變得更加復雜,即使我們只是想要將一個簡單的Excel文件傳輸到文件系統中。

這里,我建議使用一個簡單,但是很有用的T-SQL 存儲程序,它可以通過使用鏈接伺服器(linked server)技術將數據導出到Excel 中。

為了實現導出,你必須首先創建一個空的有固定名字的Excel文件,並將其放置在伺服器上。我把它命名為Empty.xls,並放置在c:temp的目錄下。這個文件不會被刪除,並且在裝入數據之前,作為目標Excel文件的模板使用。

Empty.xls文件被構建的時候,只含有一個工作頁,名為ExcelTable,其中的第一行(僅有的一行)包含如下字母: A,B,C,...Z。這些字母可作為Excel表的列名稱。這意味著在一個查詢中,我們可以導出26個列。(給定的存儲程序代碼可被修改,以支持結果集中含有更多的列的情況。只需要在Excel模板中簡單地書寫F1, F2 ,F3...,然後更改程序中相應列的列表即可反映出變化了。)

sp_write2Excel是一個T-SQL存儲過程,它獲取目標Excel文件的名字和路徑,結果集中列的數量,以及T-SQL查詢。在查詢中應該使用轉換函數將所有的非字元串數據導入列中,因為最終的Excel單元中數據實際上都是字元串格式的。

這個過程將empty.xls模板文件拷貝到新的目標Excel文件中。然後它再構建一個鏈接伺服器到剛才的文件中,並使用動態的T-SQL來構建這個Excel文件,並且使用插入/選擇語句來將數據寫入其中。

以下是程序代碼:
Create proc sp_write2Excel (@fileName varchar(100),
@NumOfColumns tinyint,
@query varchar(200))
as
begin
declare @dosStmt varchar(200)
declare @tsqlStmt varchar(500)
declare @colList varchar(200)
declare @charInd tinyint

set nocount on

-- 構建列的列表 A,B,C ...
-- 直到達到列的數量.

set @charInd=0
set @colList = 'A'
while @charInd < @NumOfColumns - 1
begin
set @charInd = @charInd + 1
set @colList = @colList + ',' + char(65 + @charInd)
end

-- 創建一個空的Excel 文件作為目標文件,通過拷貝模板Excel 文件來命名
set @dosStmt = ' c:tempempty.xls ' + @fileName
exec master..xp_cmdshell @dosStmt

-- 創建一個「臨時」的鏈接伺服器到剛才的文件中,以用於「導出」數據
EXEC sp_addlinkedserver 'ExcelSource',
'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
@fileName,
NULL,
'Excel 5.0'

-- 構建一個T-SQL 語句,用於實際導出查詢結果
-- 到目標鏈接伺服器上的表中
set @tsqlStmt = 'Insert ExcelSource...[ExcelTable$] ' + ' ( ' + @colList + ' ) '+ @query

print @tsqlStmt

-- 執行動態的 TSQL語句
exec (@tsqlStmt)

-- 刪除鏈接伺服器
EXEC sp_dropserver 'ExcelSource'
set nocount off
end
GO

程序使用實例:
Use master
go
exec sp_write2Excel
--目標excel文件
'c:tempNorthProcts.xls' ,

-- 結果中列的數量
3,

-- 將要導出結果的查詢
'select convert(varchar(10),ProctId),
ProctName,
Convert (varchar(20),UnitPrice) from Northwind..Procts'

結論,這個程序可作為一個通用的工具將數據導出到Excel工作頁中,而BCP工具則只能將數據導出到文本文件中。

我們可以使用這個程序來代替DTS包設計器,以及DTS向導,每當需要調用這樣的動作的時候,都可以用它將數據導出到excel 文件中。

⑤ VBA:Excel 調用 MSSQL存儲過程並返回結果,點了按鈕啥反應也沒有,也不報錯,請問該怎麼寫啊

設置rsData gobjCmd.Execute
雖然不rsData.EOF的

rsData.MoveNext

迴路

這里是給rsdate分配,

然後是有循環游標向下移動,直到邊界

當然,什麼都不會發生
DO循環中可以添加你想要什麼

⑥ 如何在excel中執行sql存儲過程

Sub Test()
'工具->引用->Microsoft ActiveX DataObjects 2.0
'定義連接對象

Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
'連接字元串
strcn = "Driver=sql server;Server=伺服器;database=資料庫;uid=sa;pwd=密碼"
cnn.Open strcn

Dim D1 As Date '開始日期
Dim D2 As Date '結束日期

D1 = Range("B2").Text
D2 = Range("B3").Text

If IsDate(D1) And IsDate(D2) Then
rs.Open "sp_djcount '" & D1 & "','" & D2 & "'", strcn, 3, 1 '存儲過程
rs.Open "Select * From 表 ", strcn, 3, 1 'sql語句
Range("A5").CopyFromRecordset rs

MsgBox "成功!!!", vbInformation + vbOKOnly, "溫馨提示"
Else
MsgBox "請輸入開始日期和截止日期", vbQuestion + vbOKOnly, "溫馨提示"
End If
'關閉連接
cnn.Close
Set rs = Nothing
Set cnn = Nothing
End Sub

⑦ 請教存儲過程能否操作excel

存儲過程是用於資料庫的,不是用於Office軟體的。

⑧ 200分求一個EXCEL導入SQL的存儲過程

示例
導入與追加
本文使用的示例 SQL 語句演示了「創建表」查詢。該查詢通過使用 SELECT...INTO...FROM 語法將 Excel 數據導入新的 SQL Server 表。如這些代碼示例所示,在繼續引用源對象和目標對象時,可以通過使用 INSERT INTO...SELECT...FROM 語法將這些語句轉換成追加查詢。

使用 DTS 或 SSIS
可以使用「SQL Server Data Transformation Services (DTS) 導入向導」或「SQL Server 導入和導出向導」將 Excel 數據導入到 SQL Server 表中。在逐步執行向導並選擇 Excel 源表時,要記住附加美元符號 ($) 的 Excel 對象名稱代表工作表(例如,Sheet1$),而沒有美元符號的普通對象名稱代表 Excel 指定的范圍。

使用鏈接伺服器
要簡化查詢,可以將 Excel 工作簿配置為 SQL Server 中的鏈接伺服器。 有關其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
306397 (http://support.microsoft.com/kb/306397/EN-US/ ) 如何:結合 SQL Server 鏈接的伺服器和分布式查詢使用 Excel
下列代碼將 Excel 鏈接伺服器「EXCELLINK」上的 Customers 工作表數據導入新的名為 XLImport1 的 SQL Server 表:
SELECT * INTO XLImport1 FROM EXCELLINK...[Customers$]

還可以通過按照以下方式使用 OPENQUERY 以全通過方式對源數據執行查詢:
SELECT * INTO XLImport2 FROM OPENQUERY(EXCELLINK,
'SELECT * FROM [Customers$]')

使用分布式查詢
如果不想將對 Excel 工作簿的永久連接配置為鏈接伺服器,可以通過使用 OPENDATASOURCE 或 OPENROWSET 函數為特定目的導入數據。下列代碼示例也能將 Excel Customers 工作表數據導入新的 SQL Server 表:
SELECT * INTO XLImport3 FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\test\xltest.xls;Extended Properties=Excel 8.0')...[Customers$]

SELECT * INTO XLImport4 FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\test\xltest.xls', [Customers$])

SELECT * INTO XLImport5 FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\test\xltest.xls', 'SELECT * FROM [Customers$]')

使用 ADO 和 SQLOLEDB
當通過使用 Microsoft OLE DB for SQL Server (SQLOLEDB) 在 ADO 應用程序中連接到 SQL Server 時,可以使用與「使用分布式查詢」 一節中相同的「分布式查詢」語法將 Excel 數據導入 SQL Server。

下列 Visual Basic 6.0 代碼示例要求添加對 ActiveX 數據對象 (ADO) 的項目引用。此代碼示例還演示了如何在 SQLOLEDB 連接上使用 OPENDATASOURCE 和 OPENROWSET。
Dim cn As ADODB.Connection
Dim strSQL As String
Dim lngRecsAff As Long
Set cn = New ADODB.Connection
cn.Open "Provider=SQLOLEDB;Data Source=<server>;" & _
"Initial Catalog=<database>;User ID=<user>;Password=<password>"

'Import by using OPENDATASOURCE.
strSQL = "SELECT * INTO XLImport6 FROM " & _
"OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', " & _
"'Data Source=C:\test\xltest.xls;" & _
"Extended Properties=Excel 8.0')...[Customers$]"
Debug.Print strSQL
cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
Debug.Print "Records affected: " & lngRecsAff

'Import by using OPENROWSET and object name.
strSQL = "SELECT * INTO XLImport7 FROM " & _
"OPENROWSET('Microsoft.Jet.OLEDB.4.0', " & _
"'Excel 8.0;Database=C:\test\xltest.xls', " & _
"[Customers$])"
Debug.Print strSQL
cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
Debug.Print "Records affected: " & lngRecsAff

'Import by using OPENROWSET and SELECT query.
strSQL = "SELECT * INTO XLImport8 FROM " & _
"OPENROWSET('Microsoft.Jet.OLEDB.4.0', " & _
"'Excel 8.0;Database=C:\test\xltest.xls', " & _
"'SELECT * FROM [Customers$]')"
Debug.Print strSQL
cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
Debug.Print "Records affected: " & lngRecsAff

cn.Close
Set cn = Nothing

使用 ADO 和 Jet Provider
上一節中的示例使用 ADO 和 SQLOLEDB Provider 連接到從 Excel 到 SQL 導入的目標。也可以使用 OLE DB Provider for Jet 4.0 來連接到 Excel 源。

Jet 數據引擎可以通過使用具有三種不同格式的特殊語法來在 SQL 語句中引用外部資料庫:
[Full path to Microsoft Access database].[Table Name]
[ISAM Name;ISAM Connection String].[Table Name]
[ODBC;ODBC Connection String].[Table Name]
本節使用第三種格式創建到目標 SQL Server 資料庫的 ODBC 連接。可以使用 ODBC 數據源名稱 (DSN) 或者 DSN-less 連接字元串:
DSN:
[odbc;DSN=<DSN name>;UID=<user>;PWD=<password>]

DSN-less:
[odbc;Driver={SQL Server};Server=<server>;Database=<database>;
UID=<user>;PWD=<password>]

下列 Visual Basic 6.0 代碼示例要求添加對 ADO 的項目引用。此代碼示例演示了如何使用 Jet 4.0 Provider 通過 ADO 連接將 Excel 數據導入到 SQL Server。
Dim cn As ADODB.Connection
Dim strSQL As String
Dim lngRecsAff As Long
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\test\xltestt.xls;" & _
"Extended Properties=Excel 8.0"

'Import by using Jet Provider.
strSQL = "SELECT * INTO [odbc;Driver={SQL Server};" & _
"Server=<server>;Database=<database>;" & _
"UID=<user>;PWD=<password>].XLImport9 " & _
"FROM [Customers$]"
Debug.Print strSQL
cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
Debug.Print "Records affected: " & lngRecsAff

cn.Close
Set cn = Nothing

也可以通過使用該語法(Jet Provider 支持)將 Excel 數據導入其他 Microsoft Access 資料庫、索引順序存取方法 (ISAM)(「desktop」)資料庫或 ODBC 資料庫。

回到頂端
疑難解答
記住附加美元符號 ($) 的 Excel 對象名稱代表工作表(例如:Sheet1$),而普通對象名稱代表 Excel 指定的范圍。
在某些環境中,特別是用表名稱取代 SELECT 查詢指派 EXCEL 源數據時,目標 SQL Server 表中的列會按照字母順序重排。有關 Jet Provider 中存在的這一問題的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
299484 (http://support.microsoft.com/kb/299484/EN-US/ ) PRB:使用 ADOX 檢索 Access 表的列時,列按字母順序排列
當 Jet Provider 確定一個 Excel 列包含了混合文本和數值數據時,Jet Provider 會選擇「majority」數據類型並將不匹配的值以 NULL 形式返回。有關如何解決這個問題的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
194124 (http://support.microsoft.com/kb/194124/EN-US/ ) PRB:使用 DAO OpenRecordset 時 Excel 返回值為 NULL
回到頂端
參考有關如何將 Excel 用作數據源的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章: 257819 (http://suppo...有關如何將 Excel 用作數據源的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
257819 (http://support.microsoft.com/kb/257819/EN-US/ ) 如何:在 Visual Basic 或 VBA 中使用 ADO 來處理 Excel 數據
有關如何將數據傳輸到 Excel 中的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
295646 (http://support.microsoft.com/kb/295646/EN-US/ ) 如何:使用 ADO 將數據從 ADO 數據源傳輸到 Excel
247412 (http://support.microsoft.com/kb/247412/EN-US/ ) INFO:將數據從 Visual Basic 傳輸到 Excel 的方法
246335 (http://support.microsoft.com/kb/246335/EN-US/ ) 如何:使用「自動化」功能將數據從 ADO 記錄集傳輸到 Excel
319951 (http://support.microsoft.com/kb/319951/EN-US/ ) 如何:通過 SQL Server 數據傳輸服務向 Excel 傳送數據
306125 (http://support.microsoft.com/kb/306125/EN-US/ ) 如何:將數據從 Microsoft SQL Server 導入 Microsoft Excel

⑨ 怎樣將EXCEL數據表,用存儲過程或本地包導入到SQL SERVER 資料庫中

excel2003導入資料庫的語句是:
select * into newtable from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=C:\a.xls',a$)
改成需要的存儲過程吧

熱點內容
c語言中a10什麼意思 發布:2024-04-27 10:45:43 瀏覽:58
物聯網中ftp是什麼意思 發布:2024-04-27 10:41:17 瀏覽:986
銀行密碼保護在哪裡 發布:2024-04-27 10:25:23 瀏覽:189
tomcat源碼導入eclipse 發布:2024-04-27 10:25:15 瀏覽:194
android的api 發布:2024-04-27 10:23:39 瀏覽:683
官式訪問 發布:2024-04-27 10:04:00 瀏覽:522
國產高配置有哪些 發布:2024-04-27 09:18:26 瀏覽:948
建行手機app忘記密碼如何修改 發布:2024-04-27 08:58:59 瀏覽:393
蟻群演算法的數學模型 發布:2024-04-27 08:58:39 瀏覽:994
androidactivity生命 發布:2024-04-27 07:33:48 瀏覽:84