精妙的SQL和SQL SERVER 与ACCESS、EXCEL的数据导入导出转换

ContractedBlock.gif ExpandedBlockStart.gif Code
  1 * 说明:复制表(只复制结构,源表名:a 新表名:b)
  2       select * into b from a where 1<>1
  3 
  4     * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b)
  5       insert into b(a, b, c) select d,e,f from b;
  6 
  7     * 说明:显示文章、提交人和最后回复时间
  8       select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
  9 
 10     * 说明:外连接查询(表名1:a 表名2:b)
 11       select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
 12 
 13     * 说明:日程安排提前五分钟提醒
 14       select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
 15 
 16     * 说明:两张关联表,删除主表中已经在副表中没有的信息
 17       delete from info where not exists ( select * from infobz where info.infid=infobz.infid )
 18 
 19     * 说明:--
 20 
 21       SQL:
 22 
 23       SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
 24 
 25       FROM TABLE1,
 26 
 27       (SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
 28 
 29       FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
 30 
 31       FROM TABLE2
 32 
 33       WHERE TO_CHAR(UPD_DATE,'YYYY/MM'= TO_CHAR(SYSDATE, 'YYYY/MM')) X,
 34 
 35       (SELECT NUM, UPD_DATE, STOCK_ONHAND
 36 
 37       FROM TABLE2
 38 
 39       WHERE TO_CHAR(UPD_DATE,'YYYY/MM'=
 40 
 41       TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM'|| '/01','YYYY/MM/DD'- 1'YYYY/MM') ) Y,
 42 
 43       WHERE X.NUM = Y.NUM (+
 44 
 45       AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0<> X.STOCK_ONHAND ) B
 46 
 47       WHERE A.NUM = B.NUM
 48 
 49     * 说明:--
 50       select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源地,高考总成绩
 51 
 52     * 从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)
 53 
 54       SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy'AS telyear,
 55 
 56       SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,
 57 
 58       SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,
 59 
 60       SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,
 61 
 62       SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,
 63 
 64       SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,
 65 
 66       SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,
 67 
 68       SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,
 69 
 70       SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,
 71 
 72       SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,
 73 
 74       SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,
 75 
 76       SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,
 77 
 78       SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC
 79 
 80       FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration
 81 
 82       FROM TELFEESTAND a, TELFEE b
 83 
 84       WHERE a.tel = b.telfax) a
 85 
 86       GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')
 87 
 88     * 说明:四表联查问题
 89       select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where ..
 90 
 91     * 说明:得到表中最小的未使用的ID号
 92 
 93     * SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1THEN MIN(HandleID) + 1 ELSE 1 ENDas HandleID  FROM Handle WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)
 94 
 95     * 一个SQL语句的问题:行列转换
 96       select * from v_temp
 97       上面的视图结果如下:
 98       user_name role_name
 99       -------------------------
100       系统管理员 管理员
101       feng 管理员
102       feng 一般用户
103       test 一般用户
104       想把结果变成这样:
105       user_name role_name
106       ---------------------------
107       系统管理员 管理员
108       feng 管理员,一般用户
109       test 一般用户
110       ===================
111       create table a_test(name varchar(20),role2 varchar(20))
112       insert into a_test values('','管理员')
113       insert into a_test values('','管理员')
114       insert into a_test values('','一般用户')
115       insert into a_test values('','一般用户')
116 
117       create function join_str(@content varchar(100))
118       returns varchar(2000)
119       as
120       begin
121       declare @str varchar(2000)
122       set @str=''
123       select @str=@str+','+rtrim(role2) from a_test where [name]=@content
124       select @str=right(@str,len(@str)-1)
125       return @str
126       end
127       go
128 
129       --调用:
130       select [name],dbo.join_str([name]) role2 from a_test group by [name]
131 
132       --select distinct name,dbo.uf_test(name) from a_test
133 
134     * 快速比较结构相同的两表
135       结构相同的两表,一表有记录3万条左右,一表有记录2万条左右,我怎样快速查找两表的不同记录?
136       ============================
137       给你一个测试方法,从northwind中的orders表取数据。
138       select * into n1 from orders
139       select * into n2 from orders
140 
141       select * from n1
142       select * from n2
143 
144       --添加主键,然后修改n1中若干字段的若干条
145       alter table n1 add constraint pk_n1_id primary key (OrderID)
146       alter table n2 add constraint pk_n2_id primary key (OrderID)
147 
148       select OrderID from (select * from n1 union select * from n2) a group by OrderID having count(*> 1
149 
150       应该可以,而且将不同的记录的ID显示出来。
151       下面的适用于双方记录一样的情况,
152 
153       select * from n1 where orderid in (select OrderID from (select * from n1 union select * from n2) a group by OrderID having count(*> 1)
154       至于双方互不存在的记录是比较好处理的
155       --删除n1,n2中若干条记录
156       delete from n1 where orderID in ('10728','10730')
157       delete from n2 where orderID in ('11000','11001')
158 
159       --*************************************************************
160       -- 双方都有该记录却不完全相同
161       select * from n1 where orderid in(select OrderID from (select * from n1 union select * from n2) a group by OrderID having count(*> 1)
162       union
163       --n2中存在但在n1中不存的在10728,10730
164       select * from n1 where OrderID not in (select OrderID from n2)
165       union
166       --n1中存在但在n2中不存的在11000,11001
167       select * from n2 where OrderID not in (select OrderID from n1)
168 
169     * 四种方法取表里n到m条纪录:
170 
171       1.
172       select top m * into 临时表(或表变量) from tablename order by columnname -- 将top m笔插入
173       set rowcount n
174       select * from 表变量 order by columnname desc
175 
176 
177       2.
178       select top n * from (select top m * from tablename order by columnname) a order by columnname desc
179 
180 
181       3.如果tablename里没有其他identity列,那么:
182       select identity(int) id0,* into #temp from tablename
183 
184       取n到m条的语句为:
185       select * from #temp where id0 >=and id0 <= m
186 
187       如果你在执行select identity(int) id0,* into #temp from tablename这条语句的时候报错,那是因为你的DB中间的select into/bulkcopy属性没有打开要先执行:
188       exec sp_dboption 你的DB名字,'select into/bulkcopy',true
189 
190 
191       4.如果表里有identity属性,那么简单:
192       select * from tablename where identitycol between n and m
193 
194     * 如何删除一个表中重复的记录?
195       create table a_dist(id int,name varchar(20))
196 
197       insert into a_dist values(1,'abc')
198       insert into a_dist values(1,'abc')
199       insert into a_dist values(1,'abc')
200       insert into a_dist values(1,'abc')
201 
202       exec up_distinct 'a_dist','id'
203 
204       select * from a_dist
205 
206       create procedure up_distinct(@t_name varchar(30),@f_key varchar(30))
207       --f_key表示是分组字段﹐即主键字段
208       as
209       begin
210       declare @max integer,@id varchar(30) ,@sql varchar(7999) ,@type integer
211       select @sql = 'declare cur_rows cursor for select '+@f_key+' ,count(*) from ' +@t_name +' group by ' +@f_key +' having count(*) > 1'
212       exec(@sql)
213       open cur_rows
214       fetch cur_rows into @id,@max
215       while @@fetch_status=0
216       begin
217       select @max = @max -1
218       set rowcount @max
219       select @type = xtype from syscolumns where id=object_id(@t_nameand name=@f_key
220       if @type=56
221       select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+ @id
222       if @type=167
223       select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+''''+ @id +''''
224       exec(@sql)
225       fetch cur_rows into @id,@max
226       end
227       close cur_rows
228       deallocate cur_rows
229       set rowcount 0
230       end
231 
232       select * from systypes
233       select * from syscolumns where id = object_id('a_dist')
234 
235     * 查询数据的最大排序问题(只能用一条语句写)
236       CREATE TABLE hard (qu char (11) ,co char (11) ,je numeric(30))
237 
238       insert into hard values ('A','1',3)
239       insert into hard values ('A','2',4)
240       insert into hard values ('A','4',2)
241       insert into hard values ('A','6',9)
242       insert into hard values ('B','1',4)
243       insert into hard values ('B','2',5)
244       insert into hard values ('B','3',6)
245       insert into hard values ('C','3',4)
246       insert into hard values ('C','6',7)
247       insert into hard values ('C','2',3)
248 
249 
250       要求查询出来的结果如下:
251 
252       qu co je
253       ----------- ----------- -----
254       A 6 9
255       A 2 4
256       B 3 6
257       B 2 5
258       C 6 7
259       C 3 4
260 
261 
262       就是要按qu分组,每组中取je最大的前2位!!
263       而且只能用一句sql语句!!!
264       select * from hard a where je in (select top 2 je from hard b where a.qu=b.qu order by je)
265 
266     * 求删除重复记录的sql语句?
267       怎样把具有相同字段的纪录删除,只留下一条。
268       例如,表test里有id,name字段
269       如果有name相同的记录 只留下一条,其余的删除。
270       name的内容不定,相同的记录数不定。
271       有没有这样的sql语句?
272       ==============================
273       A:一个完整的解决方案:
274 
275       将重复的记录记入temp1表:
276       select [标志字段id],count(*into temp1 from [表名]
277       group by [标志字段id]
278       having count(*)>1
279 
280       2、将不重复的记录记入temp1表:
281       insert temp1 select [标志字段id],count(*from [表名] group by [标志字段id] having count(*)=1
282 
283       3、作一个包含所有不重复记录的表:
284       select * into temp2 from [表名] where 标志字段id in(select 标志字段id from temp1)
285 
286       4、删除重复表:
287       delete [表名]
288 
289       5、恢复表:
290       insert [表名] select * from temp2
291 
292       6、删除临时表:
293       drop table temp1
294       drop table temp2
295       ================================
296       B:
297       create table a_dist(id int,name varchar(20))
298 
299       insert into a_dist values(1,'abc')
300       insert into a_dist values(1,'abc')
301       insert into a_dist values(1,'abc')
302       insert into a_dist values(1,'abc')
303 
304       exec up_distinct 'a_dist','id'
305 
306       select * from a_dist
307 
308       create procedure up_distinct(@t_name varchar(30),@f_key varchar(30))
309       --f_key表示是分组字段﹐即主键字段
310       as
311       begin
312       declare @max integer,@id varchar(30) ,@sql varchar(7999) ,@type integer
313       select @sql = 'declare cur_rows cursor for select '+@f_key+' ,count(*) from ' +@t_name +' group by ' +@f_key +' having count(*) > 1'
314       exec(@sql)
315       open cur_rows
316       fetch cur_rows into @id,@max
317       while @@fetch_status=0
318       begin
319       select @max = @max -1
320       set rowcount @max
321       select @type = xtype from syscolumns where id=object_id(@t_nameand name=@f_key
322       if @type=56
323       select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+ @id
324       if @type=167
325       select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+''''+ @id +''''
326       exec(@sql)
327       fetch cur_rows into @id,@max
328       end
329       close cur_rows
330       deallocate cur_rows
331       set rowcount 0
332       end
333 
334       select * from systypes
335       select * from syscolumns where id = object_id('a_dist')
336 
337     * 行列转换--普通
338 
339       假设有张学生成绩表(CJ)如下
340       Name Subject Result
341       张三 语文 80
342       张三 数学 90
343       张三 物理 85
344       李四 语文 85
345       李四 数学 92
346       李四 物理 82
347 
348       想变成
349       姓名 语文 数学 物理
350       张三 80 90 85
351       李四 85 92 82
352 
353       declare @sql varchar(4000)
354       set @sql = 'select Name'
355       select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
356       from (select distinct Subject from CJ) as a
357       select @sql = @sql+' from test group by name'
358       exec(@sql)
359 
360       行列转换--合并
361 
362       有表A,
363       id pid
364       1 1
365       1 2
366       1 3
367       2 1
368       2 2
369       3 1
370       如何化成表B:
371       id pid
372       1 1,2,3
373       2 1,2
374       3 1
375 
376       创建一个合并的函数
377       create function fmerg(@id int)
378       returns varchar(8000)
379       as
380       begin
381       declare @str varchar(8000)
382       set @str=''
383       select @str=@str+','+cast(pid as varcharfrom 表A where id=@id
384       set @str=right(@str,len(@str)-1)
385       return(@str)
386       End
387       go
388 
389       --调用自定义函数得到结果
390       select distinct id,dbo.fmerg(id) from 表A
391 
392     * 如何取得一个数据表的所有列名
393 
394       方法如下:先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名。
395       SQL语句如下:
396       declare @objid int,@objname char(40)
397       set @objname = 'tablename'
398       select @objid = id from sysobjects where id = object_id(@objname)
399       select 'Column_name' = name from syscolumns where id = @objid order by colid
400 
401       或
402 
403       SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='users'
404 
405     * 通过SQL语句来更改用户的密码
406 
407       修改别人的,需要sysadmin role
408       EXEC sp_password NULL'newpassword''User'
409 
410       如果帐号为SA执行EXEC sp_password NULL'newpassword', sa
411 
412     * 怎么判断出一个表的哪些字段不允许为空?
413 
414       select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE='NO' and TABLE_NAME=tablename
415 
416     * 如何在数据库里找到含有相同字段的表?
417       a. 查已知列名的情况
418       SELECT b.name as TableName,a.name as columnname
419       From syscolumns a INNER JOIN sysobjects b
420       ON a.id=b.id
421       AND b.type='U'
422       AND a.name='你的字段名字'
423 
424     * 未知列名查所有在不同表出现过的列名
425       Select o.name As tablename,s1.name As columnname
426       From syscolumns s1, sysobjects o
427       Where s1.id = o.id
428       And o.type = 'U'
429       And Exists (
430       Select 1 From syscolumns s2
431       Where s1.name = s2.name
432       And s1.id <> s2.id
433       )
434 
435     * 查询第xxx行数据
436 
437       假设id是主键:
438       select * from (select top xxx * from yourtable) aa where not exists(select 1 from (select top xxx-1 * from yourtable) bb where aa.id=bb.id)
439 
440       如果使用游标也是可以的
441       fetch absolute [number] from [cursor_name]
442       行数为绝对行数
443 
444     * SQL Server日期计算
445       a. 一个月的第一天
446       SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
447       b. 本周的星期一
448       SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
449       c. 一年的第一天
450       SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
451       d. 季度的第一天
452       SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
453       e. 上个月的最后一天
454       SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
455       f. 去年的最后一天
456       SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
457       g. 本月的最后一天
458       SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+10))
459       h. 本月的第一个星期一
460       select DATEADD(wk, DATEDIFF(wk,0,
461       dateadd(dd,6-datepart(day,getdate()),getdate())
462       ), 0)
463       i. 本年的最后一天
464       SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+10))。
465 
466     * 获取表结构[把 'sysobjects' 替换 成 'tablename' 即可]
467 
468       SELECT CASE IsNull(I.name, '')
469       When '' Then ''
470       Else '*'
471       End as IsPK,
472       Object_Name(A.id) as t_name,
473       A.name as c_name,
474       IsNull(SubString(M.text1254), ''as pbc_init,
475       T.name as F_DataType,
476       CASE IsNull(TYPEPROPERTY(T.name, 'Scale'), '')
477       WHEN '' Then Cast(A.prec as varchar)
478       ELSE Cast(A.prec as varchar+ ',' + Cast(A.scale as varchar)
479       END as F_Scale,
480       A.isnullable as F_isNullAble
481       FROM Syscolumns as A
482       JOIN Systypes as T
483       ON (A.xType = T.xUserType AND A.Id = Object_id('sysobjects') )
484       LEFT JOIN ( SysIndexes as I
485       JOIN Syscolumns as A1
486       ON ( I.id = A1.id and A1.id = object_id('sysobjects'and (I.status & 0x800= 0x800 AND A1.colid <= I.keycnt) )
487       ON ( A.id = I.id AND A.name = index_col('sysobjects', I.indid, A1.colid) )
488       LEFT JOIN SysComments as M
489       ON ( M.id = A.cdefault and ObjectProperty(A.cdefault, 'IsConstraint'= 1 )
490       ORDER BY A.Colid ASC
491 
492     * 提取数据库内所有表的字段详细说明的SQL语句
493 
494       SELECT
495       (case when a.colorder=1 then d.name else '' end) N'表名',
496       a.colorder N'字段序号',
497       a.name N'字段名',
498       (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then ''else ''
499       end) N'标识',
500       (case when (SELECT count(*)
501       FROM sysobjects
502       WHERE (name in
503       (SELECT name
504       FROM sysindexes
505       WHERE (id = a.id) AND (indid in
506       (SELECT indid
507       FROM sysindexkeys
508       WHERE (id = a.id) AND (colid in
509       (SELECT colid
510       FROM syscolumns
511       WHERE (id = a.id) AND (name = a.name))))))) AND
512       (xtype = 'PK'))>0 then '' else '' end) N'主键',
513       b.name N'类型',
514       a.length N'占用字节数',
515       COLUMNPROPERTY(a.id,a.name,'PRECISION'as N'长度',
516       isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0as N'小数位数',
517       (case when a.isnullable=1 then ''else '' end) N'允许空',
518       isnull(e.text,'') N'默认值',
519       isnull(g.[value],''AS N'字段说明'
520       FROM syscolumns a
521       left join systypes b
522       on a.xtype=b.xusertype
523       inner join sysobjects d
524       on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
525       left join syscomments e
526       on a.cdefault=e.id
527       left join sysproperties g
528       on a.id=g.id AND a.colid = g.smallid
529       order by object_name(a.id),a.colorder
530 
531     * 快速获取表test的记录总数[对大容量表非常有效]
532 
533       快速获取表test的记录总数:
534       select rows from sysindexes where id = object_id('test'and indid in (0,1)
535 
536       update 2 set KHXH=(ID+1)\2 2行递增编号
537       update [23] set id1 = 'No.'+right('00000000'+id,6where id not like 'No%' //递增
538       update [23] set id1= 'No.'+right('00000000'+replace(id1,'No.',''),6//补位递增
539       delete from [1] where (id%2)=1
540       奇数
541 
542     * 替换表名字段
543       update [1] set domurl = replace(domurl,'Upload/Imgswf/','Upload/Photo/'where domurl like '%Upload/Imgswf/%'
544 
545     * 截位
546       SELECT LEFT(表名, 5)
547 熟悉SQL SERVER 2000的数据库管理员都知道,其DTS可以进行数据的导入导出,其实,我们也可以使用Transact-SQL语句进行导入导出操作。在 Transact-SQL语句中,我们主要使用OpenDataSource函数、OPENROWSET 函数,关于函数的详细说明,请参考SQL联机帮助。利用下述方法,可以十分容易地实现SQL SERVER、ACCESS、EXCEL数据转换,详细说明如下:
548 
549 一、SQL SERVER 和ACCESS的数据导入导出
550 
551 常规的数据导入导出:
552 使用DTS向导迁移你的Access数据到SQL Server,你可以使用这些步骤:
553   ○1在SQL SERVER企业管理器中的Tools(工具)菜单上,选择Data Transformation
554   ○2Services(数据转换服务),然后选择  czdImport Data(导入数据)。
555   ○3在Choose a Data Source(选择数据源)对话框中选择Microsoft Access as the Source,然后键入你的.mdb数据库(.mdb文件扩展名)的文件名或通过浏览寻找该文件。
556   ○4在Choose a Destination(选择目标)对话框中,选择Microsoft OLE DB Prov ider for SQL Server,选择数据库服务器,然后单击必要的验证方式。
557   ○5在Specify Table Copy(指定表格复制)或Query(查询)对话框中,单击Copy tables(复制表格)。
558     ○6在Select Source Tables(选择源表格)对话框中,单击Select All(全部选定)。下一步,完成。
559 
560 Transact-SQL语句进行导入导出:
561 1.在SQL SERVER里查询access数据:
562 
563 SELECT * FROM OpenDataSource'Microsoft.Jet.OLEDB.4.0','Data Source="c:\DB.mdb";User ID=Admin;Password=')表名
564 
565 2.将access导入SQL server
566 在SQL SERVER 里运行:
567 SELECT * INTO newtable FROM OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0','Data Source="c:\DB.mdb";User ID=Admin;Password=' )表名
568 
569 3.将SQL SERVER表里的数据插入到Access表中
570 在SQL SERVER 里运行:
571 insert into OpenDataSource'Microsoft.Jet.OLEDB.4.0','Data Source=" c:\DB.mdb";User ID=Admin;Password=')表名 (列名1,列名2) select 列名1,列名2  from  sql表
572 
573 实例:
574 insert into  OPENROWSET('Microsoft.Jet.OLEDB.4.0','C:\db.mdb';'admin';'', Test) select id,name from Test
575 
576 
577 INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0''c:\trade.mdb''admin''', 表名) SELECT * FROM sqltablename
578 
579 二、SQL SERVER 和EXCEL的数据导入导出
580 
581 1、在SQL SERVER里查询Excel数据:
582 
583 SELECT * FROM OpenDataSource'Microsoft.Jet.OLEDB.4.0','Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')[Sheet1$]
584 
585 下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。
586 SELECT * FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')xactions
587 
588 2、将Excel的数据导入SQL server :
589 SELECT * into newtable FROM OpenDataSource'Microsoft.Jet.OLEDB.4.0','Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')[Sheet1$]
590 
591 实例:
592 SELECT * into newtable FROM OpenDataSource'Microsoft.Jet.OLEDB.4.0','Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')xactions
593 
594 3、将SQL SERVER中查询到的数据导成一个Excel文件
595 T-SQL代码:
596 EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'
597 参数:S 是SQL服务器名;U是用户;P是密码
598 说明:还可以导出文本文件等多种格式
599 
600 实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'
601 
602 EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'
603 
604 在VB6中应用ADO导出EXCEL文件代码:
605 Dim cn  As New ADODB.Connection
606 cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"
607 cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 库名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'"
608 
609 
610 4、在SQL SERVER里往Excel插入数据:
611 
612 insert into OpenDataSource'Microsoft.Jet.OLEDB.4.0','Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')table1 (A1,A2,A3) values (1,2,3)
613 
614 T-SQL代码:
615 INSERT INTO 
616  OPENDATASOURCE('Microsoft.JET.OLEDB.4.0','Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')[Filiale1$]  (bestand, produkt) VALUES (20'Test'
617 
618 
619 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jshang/archive/2007/12/14/1935772.aspx

转载于:https://www.cnblogs.com/RyanCao/archive/2009/09/12/1565143.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值