博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL 笔记
阅读量:4347 次
发布时间:2019-06-07

本文共 5344 字,大约阅读时间需要 17 分钟。

1 Excel 直接导入到数据库

exec sp_configure 'show advanced options',1 reconfigure;

exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1

 

 STUFF  函数使用

select zsfz,xsbh=STUFF((select ','+ b.xsbh from Base_xsxx b where b.zsfz=a.zsfz order by zsfz for XML path('')),1,1,'')
from Base_xsxx a
where zslc='D0805'
group by zsfz

 

 

insert into test1

select * ,''
from OPENROWSET('Microsoft.ACE.OLEDB.12.0' ,'Excel 8.0;HDR=YES;DATABASE=E:\南大宿管\南大宿管数据整理Final\东湖\东湖校区06.05修改.xls',sheet1$)

2--查询数据库所有表记录

SELECT a.name, b.rows
FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id
WHERE (a.type = 'u') AND (b.indid IN (0, 1))
ORDER BY b.rows DESC

3 表中某个字段有多条数据,排序后取其中一条

 select WORKER_NUMBER,WORKER_NAME,JOB_ATTHETIME,row_number() over(partition by WORKER_NUMBER order by JOB_ATTHETIME asc) rnn 
from base_PersonnelBA_ManagePositionTime
4 查询表备注信息
SELECT     表名       = case when a.colorder=1 then d.name else '' end,    表说明     = case when a.colorder=1 then isnull(f.value,'') else '' end,    字段序号   = a.colorder,    字段名     = a.name,    标识       = case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,    主键       = case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id 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,    类型       = b.name,    占用字节数 = a.length,    长度       = COLUMNPROPERTY(a.id,a.name,'PRECISION'),    小数位数   = isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),    允许空     = case when a.isnullable=1 then '√'else '' end,    默认值     = isnull(e.text,''),    字段说明   = isnull(g.[value],'')FROM     syscolumns aleft join     systypes b on     a.xusertype=b.xusertypeinner join     sysobjects d on     a.id=d.id  and d.xtype='U' and  d.name<>'dtproperties'left join     syscomments e on     a.cdefault=e.idleft join sys.extended_properties   g on     a.id=G.major_id and a.colid=g.minor_id  left joinsys.extended_properties fon     d.id=f.major_id and f.minor_id=0where     d.name='base_cyxx'  --and a.name='Worker_AddressG'  --如果只查询指定表,加上此红色where条件,tablename是要查询的表名;去除红色where条件查询说有的表信息order by     a.id,a.colorder
View Code

5 sql 添加备注

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'学院名称' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'base_cyxx', @level2type=N'COLUMN',@level2name=N'xymc'

6 查询数据库所有表的记录数

SELECT a.name, b.rows

FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id
WHERE (a.type = 'u') AND (b.indid IN (0, 1))
ORDER BY b.rows DESC

7 字段截取 

substring,charindex
declare @fileName varchar(100)set @fileName='aaa.exe'select substring(@fileName,charindex('.',@fileName)+1,len(@fileName))

 8 开窗函数 

对于排序开窗函数来讲,它支持的开窗函数分别为:ROW_NUMBER(行号)、RANK(排名)、DENSE_RANK(密集排名)和NTILE(分组排名)。

select  FName, FSalary, FCity, FAge,  row_number() over(order by FSalary) as rownum,  rank() over(order by FSalary) as rank,  dense_rank() over(order by FSalary) as dense_rank,  ntile(3) over(order by FSalary)as ntile ,COUNT(FName) OVER(PARTITION BY FCITY) as FCITYcount,COUNT(FName) OVER(PARTITION BY FAGE) as FAGEcountfrom  T_Person order by  FAGEcount --分组排名 ROW_NUMBER()OVER(PARTITION BY [课程] ORDER BY [分数] desc) as id 

 

 跨服务器导入数据

不同服务器数据库之间的数据操作 --创建链接服务器 exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogin  'ITSV ', 'false ',null, '用户名 ', '密码 '  --查询示例 select * from ITSV.数据库名.dbo.表名  --导入示例 select * into 表 from ITSV.数据库名.dbo.表名  --以后不再使用时删除链接服务器 exec sp_dropserver  'ITSV ', 'droplogins '  --连接远程/局域网数据(openrowset/openquery/opendatasource) --1、openrowset  --查询示例 select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)  --生成本地表 select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)  --把本地表导入远程表 insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) select *from 本地表  --更新本地表 update b set b.列A=a.列A  from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b on a.column1=b.column1  --openquery用法需要创建一个连接  --首先创建一个连接创建链接服务器 exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' --查询 select * FROM openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ') --把本地表导入远程表 insert openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ') select * from 本地表 --更新本地表 update b set b.列B=a.列B FROM openquery(ITSV,  'SELECT * FROM 数据库.dbo.表名 ') as a  inner join 本地表 b on a.列A=b.列A  --3、opendatasource/openrowset SELECT   * FROM   opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta --把本地表导入远程表 insert opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名 select * from  --4。--EXEC AT使用 必须启动rpcEXEC sp_addlinkedserver 'chinancl',' ','SQLOLEDB','CHINANCL-CMS'   --新建连接EXEC sp_addlinkedsrvlogin 'chinancl','false',null,'sa','sa'        --用户名 密码EXEC sp_serveroption 'chinancl','rpc out',true                     --启动RPC EXEC('create database text ') at [chinancl]EXEC(' use text   create table text (id int)') at [chinancl] exec sp_dropserver 'chinancl','droplogins'                          --删除链接登录名

 

转载于:https://www.cnblogs.com/zoumin123/p/7072865.html

你可能感兴趣的文章
linux基础命令:sort,uniq,cut,wc
查看>>
linux基础命令:pwd
查看>>
Linux基础命令:vimdiff
查看>>
linux基础命令:seq
查看>>
Linux基础命令:rpm
查看>>
Linux基础命令:diff
查看>>
linux基础命令:passwd
查看>>
Linux基础命令:yum
查看>>
linux关机命令总结
查看>>
linux基础命令:tar
查看>>
Linux基础命令:awk
查看>>
linux基础命令:sed
查看>>
Linux基础命令:chkconfig
查看>>
Linux基础命令:grep
查看>>
Linux基础命令:who和w
查看>>
Linux基础命令:netstat
查看>>
Linux基础命令:ln
查看>>
Linux基础命令:lsof
查看>>
Linux基础命令:more和less
查看>>
Linux基础命令:chattr和lsattr
查看>>