4887王中王鉄算盘奖结果使用脚本输出excel文件的

来源:http://www.smjxgs.com 作者:王中王高手论坛 人气:112 发布时间:2019-09-06
摘要:  转自: 原文地址:http://www.maomao365.com/?p=7335 转自:http://www.maomao365.com/?p=6679   摘要: 摘要: 下文将分享使用sql脚本输出交替变换的不同背景颜色的sql脚本的方法分享,如下所示: 实验环境

 

转自:

原文地址:http://www.maomao365.com/?p=7335

转自:http://www.maomao365.com/?p=6679


 

摘要:

摘要:

下文将分享使用sql脚本输出交替变换的不同背景颜色的sql脚本的方法分享,如下所示:
实验环境:sqlserver 2008 R2

摘要:

 


下文将分享使用sql脚本输出excel的方法
 
此脚本可以应用于 表或视图生成excel的方法,
若需使用sql脚本输出excel数据,我们可将sql脚本生成视图或临时表,

   数据表中,有一列是自动流水号,由于各种操作异常原因(或者插入失败),此列数据会变的不连续,下文将讲述使用sql脚本的方式获取数据表中的数据是否连续的方法分享,如下所示:

例:
下文 首先采用 over() row_number 函数生成的行编号,
然后对每行进行颜色变化操作,生成不同的背景色,如下所示:

然后再输出excel

输出excel语法简介:
exec
master..xp_cmdshell 'bcp [数据库名称].[架构名].[表名] out [excel存放位置全路径] -c -q -S"服务器Ip" -U "sql用户名" -P "sql密码"'

---例1:
exec 
master..xp_cmdshell 'bcp test.dbo.tableName out d:test.xls -c -q -S"." -U "sa" -P "erp"'
---将数据库test中tablName输出值d盘test.xls文件
---服务器地址.
---sql账户sa
---sql密码erp
--------------------------------------------
例2: 根据动态文件名输出excel的方法
declare @name varchar(30) ---动态文件名
set @name ='d:test123.xlsx'

exec 
('master..xp_cmdshell ''bcp test.dbo.tableName out ' @name ' -c -q -S"." -U "sa" -P "erp"''') ---拼接操作语句,并采用exec执行

注意事项:

*1 使用脚本输出的excel ,无表头
2 可动态文件名和动态sa账户密码生成相关信息
3 如果输出sql脚本的数据至excel,我们需先将sql脚本生成的数据缓存至表中,然后输出表数据至excel

xp_cmdshell相关权限需打开
*

 

create table test(keyId int,info varchar(30))
go
insert into test(keyId,info)values(10,'测试信息20180625-1')
insert into test(keyId,info)values(20,'测试信息20180626-2')
insert into test(keyId,info)values(21,'测试信息20180628-3')
insert into test(keyId,info)values(81,'测试信息20180620-4')
insert into test(keyId,info)values(92,'测试信息20180608-5')
insert into test(keyId,info)values(101,'测试信息20180605-6')
insert into test(keyId,info)values(102,'测试信息20180606-7')
go


declare @tmp varchar(max)
set @tmp ='<table>'
set @tmp =@tmp '<tr><td>流水号<td>keyId<td>info</tr>'

select 
@tmp=@tmp '<tr style=''background-color:'  case when t.[编号] %2=0 then 'blue' else '' end '''>'
 '<td>'  convert(varchar(100),t.[编号])
 '<td>'  convert(varchar(100),t.keyId)
 '<td>' t.info
 '</tr>'
from 
(
select row_number() over(order by keyId asc ) as [编号],
keyId,info from test ) as t 


set @tmp =@tmp '</table>'
select @tmp ---打印生成的html信息 

go
drop table test 

   实验环境:sqlserver 2008 R2  

 


 

例:获取表test中keyId是否为连续的数据

 

实现思路:

 

 1.采用row_number 对表test重新生成流水号

 

 2.采用with as (cte)表达式将重新生成流水号的表放入临时表

 

 3.对临时表自身进行 左连接(前一行和后一行互补),然后比较行中两张表的keyId 是否相差1,

 

   如果相差1,则代表连续数据行,反之为非连续行数据

create table test 

(keyId int,info varchar(60))

go

insert into test(keyId,info)values

(1,'maomao365.com'),(2,N'连续数判断'),

(4,N'blog教程'),(5,'maomao'),

(8,'test'),(9,'info')

;

with  tmp as 

 (select  ROW_NUMBER() over (order by keyId asc ) as keyIdNew,

* from test  ) 

select a.keyIdNew,

a.keyId,a.info ,

 case  when ISNULL(a.keyId,0)-1 = b.keyId 

              or b.keyId is null  then '连续'

       else '不连续'

 end as '连续标志'

 from tmp a 

left join tmp b on a.keyIdNew = b.keyIdNew 1

;

go

truncate table test 

drop     table test 

 4887王中王鉄算盘奖结果 1

 

本文由4887王中王鉄算盘奖结果发布于王中王高手论坛,转载请注明出处:4887王中王鉄算盘奖结果使用脚本输出excel文件的

关键词:

上一篇:Mycat数据库分片,高可用架构篇

下一篇:没有了

最火资讯