SqlServer常用命令与写法

目录

当前版本Microsoft SQL Server 2014 (SP3)Enterprise Edition

1、备份表

sqlserver不支持create table 表名 as select 的写法

select * into 备份的表名 from 原表名;

2、创建临时表

2.1 本地临时表,只能有创建者使用(断开连接会自动删除)
 create table #tableName(column1 dataType,...)
2.2 全局临时表,所有用户都能使用(使用drop table ##tableName 删除)
 create table ##tableName(column1 dataType,...)
2.3 使用一条WITH子句来指定临时结果表
with 临时表名(列名) as (select 字段 from 表)
select * from 临时表名;--这可以写select、update、insert、delete、create view
eg:
with tmp1(name) as(SELECT name FROM TEST_1)
select tmp1.name from tmp1 

可以使用上述2.1、2.2方法创建出临时表再往里面insert数据,还可以直接通过

select 字段 into #tableName;

来直接创建临时表 --相当于create as的写法。

3、查询

在写一段select语句的时候要在表名后面加上WITH (NOLOCK)

减少锁和不受排它锁影响来减少阻塞,从而提高并发时的性能。

SQL Server 中WITH (NOLOCK)浅析icon-default.png?t=N7T8https://www.cnblogs.com/kerrycode/p/3946268.html

增加列

alter table 表名  add 列名 类型;

修改列的数据类型

alter table 表名  alter column 列名 新的类型;

删除列

alter table 表名  drop column 列名,列名,....;

4、日期相关

4.1 计算上月的日期

DATEADD(datepart,number,date)   

参数含义:date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数 。datepart值如下:

select DATEADD(month,-1,'2021-05-01'); --'2021-04-01'
 获取当前时间
SELECT GETDATE();

4.2 获取月初月末

select EOMONTH(GETDATE())                         AS '本月最后一天'  
       ,EOMONTH(GETDATE(),1)                       AS '下月最后一天'
       ,EOMONTH(GETDATE(),-1)                      AS '上个月最后一天'
       ,FORMAT(EOMONTH (getdate()),'yyyy-MM-01')   AS '本月第一天'
       ,FORMAT(EOMONTH (getdate(),-1),'yyyy-MM-01')AS '上个月第一天'

 4.3 两个日期的差值

select datediff(day,getdate()-1,getdate()); 结果为1,前面的日期减后面的日期

4.4 日期格式变换 ——CONVERT() 函数

CONVERT(data_type(length),data_to_be_converted,style) 

参数含义:data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。 style值如下

select convert(varchar(20),created,120) from 表 with(nolock); 2019-10-12 18:46:43
select convert(varchar(10),created,120) from 表 with(nolock);-2019-10-12

 5、trim 函数:去除数据中的空格。  rtrim代表去除右边的空格,ltrim代表去除左边的空格

查看数据库

exec sp_databases;

查看表信息

exec sp_tables ’表名’;

SELECT * FROM sys.objects WHERE name='表名'

查看列信息

exec sp_columns 表名;

select * from syscolumns where id=object_id('表名') and name='列名'

sp_help 表名 (相当于desc

查看索引

exec sp_helpIndex 表名;

查看约束名称

exec sp_helpConstraint 表名;

查看存储过程的名字

exec sp_stored_procedures;

查看存储过程创建、定义语句

exec sp_helptext '存储过程名';

6、CROSS APPLY 与OUTER APPLY的用法

create table test_1(
name varchar(100)
,age varchar(100)
);
insert into test_1 values ('张三',15);
insert into test_1 values ('李四',16);
insert into test_1 values ('王五',17);
insert into test_1 values ('张六',21);

create table test_2(
 name varchar(100)
,id varchar(100)
);
insert into test_2 values ('张三',18);
insert into test_2 values ('张三',1);
insert into test_2 values ('李四',19);
insert into test_2 values ('王五',20);

 

 CROSS APPLY 相当于join

SELECT *
  FROM TEST_1 AS C
 CROSS APPLY (SELECT  TOP 1 *
                FROM TEST_2 AS O
               WHERE C.NAME=O.NAME
               ORDER BY ID ASC
			 ) AS CA
取TEST_1表与TEST_2表使用name字段进行join关联,取TEST_2表id的第一条
--------------相当于row_number的写法-------------
SELECT 	T.NAME1,T.AGE,T.NAME,T.ID
  FROM(SELECT ROW_NUMBER() OVER(PARTITION BY O.NAME ORDER BY O.ID ASC) AS RN
             ,C.NAME AS NAME1,C.AGE,O.NAME,O.ID
         FROM TEST_1 AS C
		 JOIN TEST_2 AS O
		   ON C.NAME=O.NAME
      )T
 WHERE RN=1
 order by T.ID ASC

 OUTER APPLY相当于left join

SELECT *
  FROM TEST_1 AS C
 OUTER APPLY (SELECT  TOP 1 *
                FROM TEST_2 AS O
               WHERE C.NAME=O.NAME
               ORDER BY ID ASC
							) AS CA;

(sqlserver2012开始支持contract的用法)

7、STUFF的用法

7.1 用来删除指定长度的字符,并在指定的起点处插入另一组字符。

STUFF(字符串, 从第几个字符开始删除, 删除的字符数, 拼接的字符串)

从第二个字符开始删除一个字符,插入【拼接】字段
SELECT STUFF('abcdef', 2, 1, '拼接'); a拼接cdef

测试数据还是用刚才的test_!和test_2表

SELECT TEST_1.NAME
,STUFF(
       (SELECT ',' + CAST(TEST_2.ID AS VARCHAR) 
          FROM TEST_2 WITH (NOLOCK)
         WHERE 1 = 1
           AND TEST_1.NAME = TEST_2.NAME --相当于left join
           ORDER BY TEST_2.ID
           FOR XML PATH('')
				),1,1,'')--把第一个【,】去掉
FROM TEST_1
group by TEST_1.NAME --防止重复
;

 可以看到TEST_2中有两条NAME是张三的id,使用逗号拼接成了1,18

参考书籍《SQL Server实用教程 SQL Server 2014版》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值