当前位置:首页 » 存储配置 » 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$)
改成需要的存储过程吧

热点内容
安卓服务器如何搭建服务器 发布:2024-05-08 17:33:27 浏览:537
什么安卓手机玩韩信好2021 发布:2024-05-08 17:29:01 浏览:31
信用卡登陆密码忘了怎么办啊 发布:2024-05-08 17:01:06 浏览:219
java设置图片 发布:2024-05-08 17:00:59 浏览:88
c语言空格删除 发布:2024-05-08 17:00:22 浏览:572
qt源代码编译 发布:2024-05-08 16:55:58 浏览:252
ubunto编译命令 发布:2024-05-08 16:55:01 浏览:57
为什么说人是被编译出来的程序 发布:2024-05-08 16:54:28 浏览:133
编译java底层框架 发布:2024-05-08 16:39:58 浏览:113
安卓手机怎么存图 发布:2024-05-08 16:22:09 浏览:423