当前位置:文档之家› SqlServer 使用存储过程 导出为Excel

SqlServer 使用存储过程 导出为Excel

SqlServer 使用存储过程 导出为Excel
SqlServer 使用存储过程 导出为Excel

SqlServer 使用存储过程导出为Excel

一个脱离office组件的可以将语句结果导出到Excel的过程

--1.执行时所连接的服务器决定文件存放在哪个服务器

[sql]view plain copy

print?

1.CREATE PROC ExportFile

2. @QuerySql VARCHAR(max)

3. ,@Server VARCHAR(20)

4. ,@User VARCHAR(20) = 'sa'

5. ,@Password VARCHAR(20)

6. ,@FilePath NVARCHAR(100) = 'c:\ExportFile.csv'

7.AS

8.DECLARE @tmp VARCHAR(50) = '[##Table' + CONVERT(VARCHAR(36),NEWID())+']'

9.BEGIN TRY

10.DECLARE @Sql VARCHAR(max),@DataSource VARCHAR(max)='';

11.--判断是否为远程服务器

12. IF @Server <> '.'AND @Server <> '127.0.0.1'

13.SET @DataSource = 'OPENDATASOURCE(''SQLOLEDB'',''Data Source='+@Server+';User ID='+@Us

er+';Password='+@Password+''').'

14.--将结果集导出到指定的数据库

15.SET @Sql = REPLACE(@QuerySql,' from ',' into '+@tmp+ ' from ' + @DataSource)

16. PRINT @Sql

17.EXEC(@Sql)

18.

19.DECLARE @Columns VARCHAR(max) = '',@Data NVARCHAR(max)=''

20.SELECT @Columns = @Columns + ',''' + name +''''--获取列名(xp_cmdshell导出文件没有列名)

21. ,@Data = @Data + ',Convert(Nvarchar,[' + name +'])'--将结果集所在的字段更新为nvarchar(避

免在列名和数据union的时候类型冲突)

22.FROM tempdb.sys.columns WHERE object_id = OBJECT_ID('tempdb..'+@tmp)

23.SELECT @Data = 'SELECT ' + SUBSTRING(@Data,2,LEN(@Data)) + ' FROM ' + @tmp

24.SELECT @Columns = 'Select ' + SUBSTRING(@Columns,2,LEN(@Columns))

25.--使用xp_cmdshell的bcp命令将数据导出

26.EXEC sp_configure 'xp_cmdshell',1

27. RECONFIGURE

28.DECLARE @cmd NVARCHAR(4000) = 'bcp "' + @Columns+' Union All ' + @Data+'" queryout ' + @Fi

lePath + ' -c' + CASE WHEN RIGHT(@FilePath,4) = '.csv'THEN' -t,'ELSE''END + ' -T'

29. PRINT @cmd

30.exec sys.xp_cmdshell @cmd

31.EXEC sp_configure 'xp_cmdshell',0

32. RECONFIGURE

33.EXEC('DROP TABLE ' + @tmp)

34.END TRY

35.BEGIN CATCH

36.--处理异常

37. IF OBJECT_ID('tempdb..'+@tmp) IS NOT NULL

38.EXEC('DROP TABLE ' + @tmp)

39.EXEC sp_configure 'xp_cmdshell',0

40. RECONFIGURE

41.

42.SELECT ERROR_MESSAGE()

43.END CATCH

44.

45.

[sql]view plain copy

print?

1.--查询分析器连接哪个服务器,文件就在哪个服务器上

2.--本地导出

3.EXEC dbo.ExportFile @QuerySql = 'select * from sys.objects', -- varchar(max)

4. @Server = '.', -- varchar(20)

5. @FilePath = N'c:\1.xls'-- nvarchar(100)

6.

7.--远程导出

8.EXEC dbo.ExportFile @QuerySql = 'select * from master.sys.objects', -- varchar(max)

9. @Server = '******', -- varchar(20)

10. @User = '*****', -- varchar(20)

11. @Password = '******', -- varchar(20)

12. @FilePath = N'c:\2.xls'-- nvarchar(100)

有可能出现这种错误

消息15123,级别16,状态1,过程sp_configure,第51 行

配置选项'xp_cmdshell' 不存在,也可能是高级选项。

使用以下命令解决

[sql]view plain copy

print?

1.-- 允许配置高级选项

2.EXEC sp_configure 'show advanced options', 1

3.GO-- 重新配置

4.RECONFIGURE

5.GO

6.-- 启用xp_cmdshell

7.EXEC sp_configure 'xp_cmdshell', 0

8.GO--重新配置

9.RECONFIGURE

10.GO

Excel到SQLServer数据库的数据导入导出技术研究

Excel到S QL Server数据库的数据导入导出技术研究3 王晓刚 杨春金 (武汉理工大学信息工程学院 武汉 430063) 摘 要 介绍Del phi中,采用新一代数据访问技术dbExp ress和OLE技术来实现Excel数据表到S QL Server数据库的数据导入和导出,及其在高速公路车辆查询系统中的应用。 关键词 dbExp ress S QL server Excel OLE 中图分类号 TP317.3 1 引言 办公自动化信息管理系统的用户常常会遇到需要把由Excel存储的数据资料导入到S QL Server 数据库,同时又要把S QL Server数据库中的数据导出到Excel数据表的问题。不同的编程语言有不同的解决方法。本文介绍应用Del phi编程来实现Excel数据表到S QL Server数据库的数据导入导出技术。 2 基本思路 OLE自动化是W indows应用程序操纵另一个程序的一种机制。被操纵的一方称为自动化服务器,操纵自动化服务器的一方称为自动化控制器。通过引用这些对象实现对自动化服务器的调用,然后通过设置对象的属性和使用对象的方法操纵自动化服务器,实现两者之间的通讯。 Del phi在数据库方面提供的强大又富有弹性的能力给广大编程人员带来了方便。dbExp ress是Del phi下一代的数据访问技术。提供高效率数据访问以及提供跨平台能力的数据访问引擎。dbEx2 p ress包含了7个组件,它们是TS QLConnecti on、TS QLDataSet、TS QLQuery、TS QLSt oredPr oc、TS QLT2 able、TS QLMonit or和TSi m p le DataSet,这些组件的功能就是让应用程序连接后端数据库,访问数据表中的数据,把修改的数据更新回数据库中以及让程序员观察dbExp ress向后端数据库下达命令等。 Del phi完全支持OLE应用程序自动化,提供的Servers栏控件可以很容易开发OLE自动化控制器实现对OLE自动化服务器的调用。在Del phi内部运行OLE自动化程序需要在U ses语句中加入Co2 mobj来开始自动化程序。通过调用Create O le Ob2 ject来检索一个自动化对象,Create O le Object调用大量系统内部的OLE函数,创建一个I dis patch的实例,并从Variant中返回一个Del phi变量类型,可以根据不同的环境提供不同的功能,这里我们使用Variant来引用Excel内部的对象以建立Del phi与Excel之间的连接。并采用dbExp ress建立Del phi 和S QL Server之间的连接,来实现Excel数据表到S QL Server数据库的数据导入和导出。 3 dbExp ress访问S QL Server技术 dbExp ress通过TS QLConnecti on组件同S QL Server数据库进行连接。双击TS QLConnecti on,就会弹出它的组件编辑器,在这个组件编辑器里,我们就可以定义连接数据库的类型,数据库名称,登陆帐号、密码等信息。以下就是我们连接名为DB2 SERVER的数据库服务器的具体情况: D river Name=MSS QL//数据库类型 Host N a me=DBSERVER//数据库服务器 Database=ETEST//数据库名 U ser_Na me=sa//登陆帐号 Pass word=sa//登陆密码 B l obSize=-1 LocaleCode=0000 MSS QL Transls olati on=ReadComm ited OS Authenticati on=False 在连接上数据库以后,dbExp ress提供了两种方法:一是使用TSi m p le DataSet组件;二是使用TS QLDataSet搭配T DataSetPr ovider和TClient D ata2 Set组件来对数据库进行访问。在实现简单数据访 85 计算机与数字工程 第35卷3收到本文时间:2006年6月8日 作者简介:王晓刚,男,硕士研究生,研究方向:网络设计及信息管理。杨春金,男,副教授,研究方向:信号与信息处理。

SQLServer存储过程返回值总结.

SQLServer 存储过程返回值总结 1. 存储过程没有返回值的情况 (即存储过程语句中没有 return 之类的语句用方法 int count = ExecuteNonQuery(..执行存储过程其返回值只有两种情况 (1假如通过查询分析器执行该存储过程,在显示栏中假如有影响的行数,则影响几行 count 就是几 (2假如通过查询分析器执行该存储过程, 在显示栏中假如显示 ' 命令已成功完成。 ' 则 count = -1;在显示栏中假如有查询结果,则 count = -1 总结:A.ExecuteNonQuery(该方法只返回影响的行数,假如没有影响行数,则该方法的返回值只能是 -1,不会为 0。 B.不论 ExecuteNonQuery(方法是按照 CommandType.StoredProcedure 或者 CommandType.Text 执行, 其效果和 A 一样。 --------------------------------------------------------------------------------------------------------------------------------------------------- 2. 获得存储过程的返回值 --通过查询分析器获得 (1不带任何参数的存储过程 (存储过程语句中含有 return ---创建存储过程 CREATE PROCEDURE testReturn AS return 145 GO ---执行存储过程

DECLARE @RC int exec @RC=testReturn select @RC ---说明 查询结果为 145 (2带输入参数的存储过程 (存储过程语句中含有 return ---创建存储过程 create procedure sp_add_table1 @in_name varchar(100, @in_addr varchar(100, @in_tel varchar(100 as if(@in_name = '' or @in_name is null return 1 else begin insert into table1(name,addr,tel values(@in_name,@in_addr,@in_tel return 0

从SQL Server中导入导出Excel的基本方法1

从SQL Server中导入/导出excel 的基本方法 /*=========== 导入/导出excel 的基本方法===========*/ 从excel文档中,导入数据到sql数据库中,直接用下面的语句: /*=============================================*/ --假如接受数据导入的表已存在 insert into 表select * from openrowset(microsoft.jet.oledb.4.0 ,excel 5.0;hdr=yes;database=c:test.xls,sheet1$) --假如导入数据并生成表 select * into 表from openrowset(microsoft.jet.oledb.4.0 ,excel 5.0;hdr=yes;database=c:test.xls,sheet1$) /*===========================================*/ --假如从sql数据库中,导出数据到excel,假如excel文档已存在,而且已按照要接收的数据创建好表头,就能够简单的用: insert into openrowset(microsoft.jet.oledb.4.0 ,excel 5.0;hdr=yes;database=c:test.xls,sheet1$) select * from 表 --假如excel文档不存在,也能够用bcp来导成类excel的文档,注意大小写: --导出表的情况 exec master..xp_cmdshell bcp 数据库名.dbo.表名out "c:test.xls" /c -/s"服务器名" /u"用户名" -p"密码" --导出查询的情况 exec master..xp_cmdshell bcp "select au_fname, au_lname from pubs..authors order by au_lname" queryout "c:test.xls" /c -/s"服务器名" /u"用户名" -p"密码" /*--说明: c:test.xls 为导入/导出的excel文档名. sheet1$ 为excel文档的工作表名,一般要加上$才能正常使用. --*/ --上面已说过,用bcp导出的是类excel文档,其实质为文本文档, --要导出真正的excel文档.就用下面的方法 /*--数据导出excel 导出表中的数据到excel,包含字段名,文档为真正的excel文档 ,假如文档不存在,将自动创建文档 ,假如表不存在,将自动创建表 基于通用性考虑,仅支持导出标准数据类型 --邹建2003.10--*/ /*--调用示例

SqlServer存储过程基本语法

动态语句基本语法 1 :普通SQL语句可以用exec执行 Select * from tableName exec('select * from tableName') exec sp_executesqlN'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL declare @fnamevarchar(20) set @fname = 'FiledName' Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。exec('select ' + @fname + ' from tableName') -- 请注意加号前后的单引号的边上加空格 当然将字符串改成变量的形式也可 declare @fnamevarchar(20) set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) set @s = 'select ' + @fname + ' from tableName' exec(@s) -- 成功 exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) set @s = 'select ' + @fname + ' from tableName' exec(@s) -- 成功 exec sp_executesql @s -- 此句正确 3. 输出参数 declare @numint, @sqlsnvarchar(4000) set @sqls='select count(*) from tableName' exec(@sqls) --如何将exec执行结果放入变量中? declare @numint, @sqlsnvarchar(4000) set @sqls='select @a=count(*) from tableName ' execsp_executesql @sqls,N'@aint output',@num output select @num 1 :普通SQL语句可以用Exec执行例: Select * from tableName Exec('select * from tableName')

基于C#的Excel数据批量导入SqlServer的方法研究与实现

基于C#的Excel 数据批量导入SqlServer 的方法研究与实现 周 虎 (江苏联合职业技术学院徐州财经分院,江苏 徐州 221008) 摘 要:批量数据导入在实际工作中提高了数据处理的效率,保证了数据的完整性。本文以某地育龄妇女基本信息为例,详细介绍了Excel数据批量导入SqlServer的设计思路与实现方法。 关键词:Excel;SqlServer;批量数据导入;NPOI;C#编程中图分类号:TP311.11 文献标识码:A Research and Implementation of Excel Data Import to SqlServer Base on C# ZHOU Hu (Xuzhou Finance Branch ,Jiangsu Unit Technical Institute ,Xuzhou 221008,China ) Abstract:Bulk data import improve the efficiency of data processing in practical work to ensure the integrity of the data.In this paper,we take some basic information of women for example,details the Excel data design ideas and implementation of bulk import to SqlServer. Keywords:excel;SqlServer;bulk data import;NPOI;C# programming 文章编号:1008-0775(2014)-12-54-02 1 引言(Introduction) Excel是办公中常用的电子表格处理工具,SqlServer是目前流行的数据库管理系统,均在信息系统中被广泛使用[1]。在某地数字化计生服务管理系统中需要从育龄妇女基本信息管理系统中导入育龄妇女的基本信息,而育龄妇女基本信息管理系统中只能将当前单位中所有的育龄妇女信息导出到Excel 文件中,然后从Excel文件中将育龄妇女信息导入到SqlServer 数据库中。在进行数据导入时,每次只需将增量数据导入到数据库,同时Excel中一条记录要写入到数据库多张表中。目前Excel导入数据库主要包括以下几种方法: (1)将Excel转化为XML或者CSV文件,然后导入数据库。(2)使用Office提供的Com组件技术。(3)使用第三方组件,如NPOI或OLEDB。 其中第一种方法和第二种方法操作复杂或者运行缓慢,在实际应用中效果均不是很理想[2],并且本系统在对Excel数据导入到数据库时需要对需要对数据进行进一步加工和处理,所以本文主要借助第三方组件NPOI的方式来实现Excel数据的批量导入。 2 Excel 批量数据导入技术分析(Excel import bulk data technical analysis) 在本项目中,需要将育龄妇女基本信息Excel文件内容读取到内存中,然后在内存中和数据库中的育龄妇女信息进行比对,将增量数据导入数据库,具体流程如图1所示。 图1 NPOI读取Excel数据到数据库 Fig.1 NPOI read excel data to database 在图1操作流程中,关键技术包括使用NPOI读取Excel 数据到内存中的DataTable和从内存中将增量数据导入到数据库。 2.1 NPOI NPOI是一个开源的基于.Net的读写Excel、Word等微软OLE2组件文档的项目,使用NPOI你就可以在没有安装Office 或者相应环境的机器上对Word/Excel文档进行读写[3]。NPOI 是一个免费的开源组件,包含了大部分的Excel功能,同时支持文件的导入与导出。 在本项目中使用NPOI将Excel表中的数据读取到内存中的Datatable中,同时将育龄妇女的编号存入集合中,便于和数据库中的育龄妇女信息进行比对。 2.2 增量数据导入到数据库 在本项目中,由于每次需要导入的育龄妇女基本信息都是包含所有的育龄妇女基本信息,为了进一步提高导入数据的效率,采用每次导入增量数据的方法,这里需要将Excel文件中的育龄妇女信息和数据库中的育龄妇女信息进行集合运算,将数据库中不包含的但Excel文件中包含的育龄妇女信息先计算出来,然后对增量数据进行批量导入数据库。具体流程如图2所示。 图2 增量数据导入 Fig.2 Incremental data import 在计算出增量数据后,Excle文件中一条记录需要同时保 软件工程师 SOFTWARE ENGINEER 第17卷第12期2014年12月 V ol.17 No.12Dec. 2014

sqlserver 数据库导出导入方法

网上例子 insert into DAY(numchnid,numsrvid,numprovid,numgwid,r_day,mo_all,mt_all,mt_valid, mt_userr,mt_sum) select v.numchnid, v.numsrvid, v.numprovid, v.numgwid, DATE(v.r_day), v.mo_all, case when w.mt_all is null then 0 else w.mt_all end, case when w.mt_valid is null then 0 else w.mt_valid end, case when w.mt_user is null then 0 else w.mt_user end, case when w.sumfee is null then 0 else w.sumfee end from report_tmp3 v left join report_tmp4 w on v.numchnid = w.numchnid and v.numsrvid = w.numsrvid and v.numprovid = w.numprovid and v.numgwid = w.numgwid and v.r_day = w.r_day; commit; 同库导出导入数据: insert into news.dbo.Table_1(title,cid) select title, id from Article where Articleid=1 跨库导出导入数据: sql语句中使用数据库连接 insert into Table_1(title,cid) select ArticleClass,ArticleTitle from OPENDATASOURCE('SQLOLEDB','Data Source=.;User ID=sa;Password=123').database1.dbo.Article(会遇到问题后面有解决方法) --查询示例 select * from ITSV.数据库名.dbo.表名 --导入示例 select * into 表 from ITSV.数据库名.dbo.表名 --以后不再使用时删除链接服务器 exec sp_dropserver 'ITSV ', 'droplogins ' --连接远程/局域网数据(openrowset/openquery/opendatasource) --1、openrowset --查询示例

如何将Excel通讯录导入安卓智能手机

如何将Excel格式的通讯录导入安卓智能手机 当下,基于安卓(Android)系统的智能手机越来越普及。安卓手机的通讯录设计得非常科学,只需在“定位盘”上按姓名的三个首拼字母,就能调出该联系人。真是方便至极。 而且,安卓手机还允许──通过电脑把Excel通讯录导入到手机中! 这下,我们便可将所需的通讯录全都导入手机啦!好处:1、扔掉传统的通讯录本子;2、查某人电话时比翻本子更快捷;3、避免“看本子、按号码”时极易发生的差错。 特把导入方法介绍如下: 第一步:在电脑打开“91手机助手”。在“360软件管家/软件宝库”下载“91手机助手for Android”软件,把它安装在电脑上。打开“91手机助手”,出现以下界面:

第二步:将手机与电脑连接。 用USB线把手机连接到电脑,然后在手机里更改USB的连接方式。不同手机,更改USB 的连接方式的方法不同。对于海信E860手机,请按下面三图逐步操作: (第1步)(第2步)(第3步) 若是THC手机,则选择“HTC Sync 同步联系人和日历”,再点“完成”: (注:不同手机的USB连接方法有较大差异。本文仅列举了E860、HTC两款手机。其它类型手机估计只需摸索一下,不难解决。)

更改USB连接方式成功后,会出现如下画面(要稍微等一段时间): 不必理会要求备份的提示框(它会自行褪去),在通行证登录对话框中点“取消”。此时,“91手机助手”中的手机屏幕会变成彩色,下面还会显示手机型号:

如果没有像上图那样的显示,说明连接不成功,请作如下尝试: 1、点“91手机助手”图案中间的“无法连接设备?点此获取帮助”。 2、当电脑提醒你向手机安装“91手机助手”时,按电脑的要求安装。 3、如果还不行,则:拔出USB连接线,重新启动电脑及手机,再重复“第二步”。 等确定连接成功后,再进行“第三步”的操作。 第三步:向手机导入通讯录。 1、将手机中已有的通讯录导出(目的是了解手机通讯录的格式,以免出差错)。选点“资料管理—联系人—导出—导出到Excel”,并选好保存地点,即将你手机上的通讯录导入到一个Excel格式通讯录中(如下图的Contact2012051911045):

SqlServer存储过程的事务模式编写

SQL Server在存储过程中编写事务处理代码的三种方法 SQL Server中数据库事务处理是相当有用的,鉴于很多SQL初学者编写的事务处理代码存往往存在漏洞,本文我们介绍了三种不同的方法,举例说明了如何在存储过程事务处理中编写正确的代码。希望能够对您有所帮助。 在编写SQL Server 事务相关的存储过程代码时,经常看到下面这样的写法: begin tran update statement 1 ... update statement 2 ... delete statement 3 ... commit tran 这样编写的SQL存在很大隐患。请看下面的例子: create table demo(id int not null) go begin tran insert into demo values (null) insert into demo values (2) commit tran go 执行时会出现一个违反not null 约束的错误信息,但随后又提示(1 row(s) affected)。我们执行select * from demo 后发现insert into demo values(2) 却执行成功了。这是什么原因呢? 原来SQL Server在发生runtime 错误时,默认会rollback引起错误的语句,而继续执行后续语句。 如何避免这样的问题呢? 有三种方法:

1. 在事务语句最前面加上set xact_abort on set xact_abort on begin tran update statement 1 ... update statement 2 ... delete statement 3 ... commit tran go 当xact_abort 选项为on 时,SQL Server在遇到错误时会终止执行并rollback 整个事务。 2. 在每个单独的DML语句执行后,立即判断执行状态,并做相应处理。 begin tran update statement 1 ... if@@error<>0 begin rollback tran goto labend end delete statement 2 ... if@@error<>0 begin rollback tran goto labend end commit tran labend: go 3. 在SQL Server 2005中,可利用try...catch 异常处理机制。

c_实现excel数据高效导入到sql数据库

c#实现excel数据高效导入到sql数据库 本文来自: IT知道网(https://www.doczj.com/doc/219850203.html,) 详细出处参考: https://www.doczj.com/doc/219850203.html,/html/net/c/20081210/3092.html 本文实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,最好的办法是使用bcp,也就是 System.Data.SqlClient.SqlBulkCopy 类来实现。不但速度快,而且代码简单,下面测试代码导入一个6万多条数据的sheet,包括读取(全部读取比较慢)在我的开发环境中只需要10 秒左右,而真正的导入过程只需要4.5秒。 using System; using System.Data; using System.Windows.Forms; using System.Data.OleDb; namespace WindowsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //测试,将excel中的sheet1导入到sqlserver中 string connString = "server=localhost;uid=sa;pwd=sqlgis;database=master"; System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog(); if (fd.ShowDialog() == DialogResult.OK) { TransferData(fd.FileName, "sheet1", connString); } } public void TransferData(string excelFile, string sheetName, string connectionString) { DataSet ds = new DataSet(); try { //获取全部数据 string strConn = "Provider=Microsoft.Ace.12.0.OLEDB.12.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 12.0;"; OleDbConnection conn = new OleDbConnection(strConn); conn.Open();

SqlServer 使用存储过程 导出为Excel

SqlServer 使用存储过程导出为Excel 一个脱离office组件的可以将语句结果导出到Excel的过程 --1.执行时所连接的服务器决定文件存放在哪个服务器 [sql]view plain copy print? 1.CREATE PROC ExportFile 2. @QuerySql VARCHAR(max) 3. ,@Server VARCHAR(20) 4. ,@User VARCHAR(20) = 'sa' 5. ,@Password VARCHAR(20) 6. ,@FilePath NVARCHAR(100) = 'c:\ExportFile.csv' 7.AS 8.DECLARE @tmp VARCHAR(50) = '[##Table' + CONVERT(VARCHAR(36),NEWID())+']' 9.BEGIN TRY 10.DECLARE @Sql VARCHAR(max),@DataSource VARCHAR(max)=''; 11.--判断是否为远程服务器 12. IF @Server <> '.'AND @Server <> '127.0.0.1' 13.SET @DataSource = 'OPENDATASOURCE(''SQLOLEDB'',''Data Source='+@Server+';User ID='+@Us er+';Password='+@Password+''').' 14.--将结果集导出到指定的数据库 15.SET @Sql = REPLACE(@QuerySql,' from ',' into '+@tmp+ ' from ' + @DataSource) 16. PRINT @Sql 17.EXEC(@Sql) 18. 19.DECLARE @Columns VARCHAR(max) = '',@Data NVARCHAR(max)='' 20.SELECT @Columns = @Columns + ',''' + name +''''--获取列名(xp_cmdshell导出文件没有列名) 21. ,@Data = @Data + ',Convert(Nvarchar,[' + name +'])'--将结果集所在的字段更新为nvarchar(避 免在列名和数据union的时候类型冲突) 22.FROM tempdb.sys.columns WHERE object_id = OBJECT_ID('tempdb..'+@tmp) 23.SELECT @Data = 'SELECT ' + SUBSTRING(@Data,2,LEN(@Data)) + ' FROM ' + @tmp 24.SELECT @Columns = 'Select ' + SUBSTRING(@Columns,2,LEN(@Columns)) 25.--使用xp_cmdshell的bcp命令将数据导出 26.EXEC sp_configure 'xp_cmdshell',1 27. RECONFIGURE 28.DECLARE @cmd NVARCHAR(4000) = 'bcp "' + @Columns+' Union All ' + @Data+'" queryout ' + @Fi lePath + ' -c' + CASE WHEN RIGHT(@FilePath,4) = '.csv'THEN' -t,'ELSE''END + ' -T' 29. PRINT @cmd 30.exec sys.xp_cmdshell @cmd 31.EXEC sp_configure 'xp_cmdshell',0 32. RECONFIGURE 33.EXEC('DROP TABLE ' + @tmp) 34.END TRY 35.BEGIN CATCH

ASP实现将Excel表格数据批量导入到SQLServer数据库

ASP实现 将Excel表格数据批量导入到SQLServer数据库 说明: 1. 被导入的工作表格, 默认以Sheet1命名, 当然也可以指定为其他的, 但必须与程序中的相符. 2. 被导入的工作表中,第?一列第?一行必须有数据. 3. 被导入的工作表中的列数要与程序中相符. '定义打开Excel表格的函数 Function OpenExcel(path) dim excel,rs,strsql On Error Resume Next Set rs = Server.CreateObject("ADODB.RecordSet") Set excel = Server.CreateObject("ADODB.Connection") excel.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & path If Err.number<> 0 Then Response.Write "请检查上传的Excel文件内部格式,文件无法打开,导入失败!" Response.End End If strsql = "SELECT * FROM [Sheet1$]" '在这里指定工作薄名称,默认是Sheet1$ Set rs = excel.Execute(strsql) Set OpenExcel = rs End Function '读取文件中的内容 Dim rsInfo Set rsInfo = Server.CreateObject("ADODB.RecordSet") Set rsInfo = OpenExcel("E:/a.xls")'这里的文件路径请用Server.Path来获取 '检查读取结果 If rsInfo.State<> 1 Then Response.Write "请检查Excel文件中的工作表命名是否为Sheet1,导入失败!" Response.End End If If rsInfo.EOF And rsInfo.BOF Then Response.Write "没有找到Excel表中的数据,导入失败!" Response.End End If If IsNull(rsInfo.Fields(0)) or Trim(rsInfo.Fields(0))="" Then Response.Write "没有找到Excel表中的数据,导入失败!" Response.End End If '这里指定导入数据的列数,列数少了退出 If rsInfo.Fields.Count< 7 Then Response.Write "Excel表中的数据列数不正确,导入失败!" Response.End End If '创建数据库连接 dim dbrs,conn,sql Set conn = Server.CreateObject("ADODB.Connection") Set dbrs = Server.CreateObject("ADODB.Recordset") '注: G_DB_ConnectString是连接数据库的字符串,自己定义 conn.ConnectionString = G_DB_ConnectString conn.Open '打开数据库连接

如何将通讯录从EXCEL(.xls)格式导入安卓手机

如何将通讯录从EXCEL(*.xls)格式导入安卓手机 正准备上床,接到同事电话。因为工作原因,需要大批量的导入通讯录,可现有的通讯录是以Excel格式保存在电脑上的。如果一个一个的录入会非常麻烦,因此谈到通讯录如何快捷方便的从Excel数据表转入安卓手机通讯录。 因为以前一直在用QQ同步助手和小米的云,通讯录都是在云端同步,日常很少会用到大批量导入的情况。仔细想了想也不是什么大问题,无非确定好安卓手机能够接受的格式,然后按照这个格式码好数据,再导入就是。正好电脑上安装了腾讯手机管家,就借这个软件试试看。经过摸索,结果还是比较理想的。整个过程居然连格式都不需要更换,直接用xls 格式即可,只不过需要更换其中的内容。具体看图: 1、首先打开安装好的腾讯手机管家 for Android版,并确保通过WIFI或者USB数据线已经成功连接手机。 ps。我的MI2很就清理了,检测结果还是比较悲催的。 2、点击上方的通讯录按钮,进入通讯录管理页面,点击导入/导出按钮,首先把手机内的通讯录导出看看是什么模样。

ps。在导出格式中发现了令人兴奋的Excel字样。 3、这就是导出的EXCEl格式的通讯录了,不知道是不是Android的手机通讯录导出都是这个模样,这个列也太多了吧。 但是很明显,我们需要找的东西还是找到了,D列就是联系人了。

AO列就是联系电话了(Ao太长了),其他的选项也是各有作用,比如AQ列很明显是为第二部电话准备的,至于AL列的HOME phone,AJ列的Company Main Phone,就不再一一解释了。

4、既然已经搞明白了结构,剩下的就是把咱们准备导入的Excel表,改造成如此格式,再导回去就大功告成! 改造嘛,蛮简单的,复制粘贴即可,这里就不附图了。主要说说往回导。 5、看看我已经保存好按照新格式改造的Excel表,找到腾讯手机管家的联系人管理页面,然后点击导出/导入进行导入工作。

列出SQLServer数据库中所有的存储过程

列出SQLServer数据库中所有的存储过程 Dim cn As rdoConnection Dim ps As rdoPreparedStatement Dim rs As rdoResultset Dim strConnect As String Dim strSQL As String '利用 DSNless 连接到 pubs 数据库 '改变参数以适合你自己的 SQL Server strConnect = "Driver={SQL Server}; Server=myserver; " & "Database=pubs; Uid=sa; Pwd=" Set cn = rdoEnvironments(0).OpenConnection(dsName:="", Prompt:=rdDriverNoPrompt, ReadOnly:=False, Connect:=strConnect) strSQL = "Select https://www.doczj.com/doc/219850203.html,,https://www.doczj.com/doc/219850203.html,,https://www.doczj.com/doc/219850203.html,,sc.length " & "FROM syscolumns sc,master..systypes st,sysobjects so " & "WHERE sc.id in (select id from sysobjects where type ='P')" & " AND so.type ='P' " & "AND sc.id = so.id " & "AND sc.type = st.type " & "AND sc.type <> 39" Set ps = cn.CreatePreparedStatement("MyPs", strSQL) Set rs = ps.OpenResultset(rdOpenStatic) list1.AddItem "SP Name,Param Name,Data Type,Length" While Not rs.EOF list1.AddItem rs(0) & " , " & rs(1) & " , " & rs(2) & " , " & rs(3) rs.MoveNext Wend rs.Close Set rs = Nothing cn.Close Set cn = Nothing 【

sqlserver数据字典导出excel

SELECT 表名=case when a.colorder=1 then https://www.doczj.com/doc/219850203.html, else '' end, 表说明=case when a.colorder=1 then isnull(f.value,'') else '' end, 字段序号=a.colorder, 字段名=https://www.doczj.com/doc/219850203.html,, 标识=case when COLUMNPROPERTY( a.id,https://www.doczj.com/doc/219850203.html,,'IsIdentity')=1 then '√'else '' end, 主键=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in ( SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid ))) then '√' else '' end, 类型=https://www.doczj.com/doc/219850203.html,, 占用字节数=a.length, 长度=COLUMNPROPERTY(a.id,https://www.doczj.com/doc/219850203.html,,'PRECISION'), 小数位数=isnull(COLUMNPROPERTY(a.id,https://www.doczj.com/doc/219850203.html,,'Scale'),0), 允许空=case when a.isnullable=1 then '√'else '' end, 默认值=isnull(e.text,''), 字段说明=isnull(g.[value],'') FROM syscolumns a left join systypes b on a.xtype=b.xusertype inner join sysobjects d on a.id=d.id and d.xtype='U' and https://www.doczj.com/doc/219850203.html,<>'dtproperties' left join syscomments e on a.cdefault=e.id left join sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_id left join sys.extended_properties f on d.id=f.major_id and f.minor_id =0 --where https://www.doczj.com/doc/219850203.html,='要查询的表' --如果只查询指定表,加上此条件 order by a.id,a.colorder

Java调用SQLServer存储过程分析

Java调用SQL Server存储过程 Java调用SQL Server的存储过程详解,主要内容: ●使用不带参数的存储过程 ●使用带有输入参数的存储过程 ●使用带有输出参数的存储过程 ●使用带有返回状态的存储过程 ●使用带有更新计数的存储过程 1.使用不带参数的存储过程 使用JDBC 驱动程序调用不带参数的存储过程时,必须使用call SQL 转义序列。不带参数的call 转义序列的语法如下所示: 实例:在SQL Server 2005 AdventureWorks示例数据库中创建以下存储过程: 此存储过程返回单个结果集,其中包含一列数据(由Person.Contact 表中前十个联系人的称呼、名称和姓氏组成)。 在下面的实例中,将向函数传递AdventureWorks示例数据库的打开连接,然后使用executeQuery方法调用GetContactFormalNames存储过程。

2.使用带有输入参数的存储过程 使用JDBC 驱动程序调用带参数的存储过程时,必须结合SQLServerConnection 类的prepareCall方法使用call SQL转义序列。带有IN参数的call转义序列的语法如下所示: 构造call转义序列时,请使用?(问号)字符来指定IN参数。此字符充当要传递给该存储过程的参数值的占位符。可以使用SQLServerPreparedStatement类的setter方法之一为参数指定值。可使用的setter方法由IN参数的数据类型决定。 向setter方法传递值时,不仅需要指定要在参数中使用的实际值,还必须指定参数在存储过程中的序数位置。例如,如果存储过程包含单个IN参数,则其序数值为1。如果存储过程包含两个参数,则第一个序数值为1,第二个序数值为2。 作为调用包含IN参数的存储过程的实例,使用SQL Server 2005 AdventureWorks示例数据库中的uspGetEmployeeManagers存储过程。此存储过程接受名为EmployeeID的单个输入参数(它是一个整数值),然后基于指定的EmployeeID返回雇员及其经理的递归列表。下面是调用此存储过程的Java代码:

相关主题
文本预览
相关文档 最新文档