当前位置:   article > 正文

SqlServer常用命令与写法_sql server命令大全

sql server命令大全

目录

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

1、备份表

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

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

2、创建临时表

  1. 2.1 本地临时表,只能有创建者使用(断开连接会自动删除)
  2. create table #tableName(column1 dataType,...)
  3. 2.2 全局临时表,所有用户都能使用(使用drop table ##tableName 删除)
  4. create table ##tableName(column1 dataType,...)
  5. 2.3 使用一条WITH子句来指定临时结果表
  6. with 临时表名(列名) as (select 字段 from 表)
  7. select * from 临时表名;--这可以写select、update、insert、delete、create view
  8. eg:
  9. with tmp1(name) as(SELECT name FROM TEST_1)
  10. 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 获取月初月末

  1. select EOMONTH(GETDATE()) AS '本月最后一天'
  2. ,EOMONTH(GETDATE(),1) AS '下月最后一天'
  3. ,EOMONTH(GETDATE(),-1) AS '上个月最后一天'
  4. ,FORMAT(EOMONTH (getdate()),'yyyy-MM-01') AS '本月第一天'
  5. ,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值如下

  1. select convert(varchar(20),created,120) fromwith(nolock); 2019-10-12 18:46:43
  2. select convert(varchar(10),created,120) fromwith(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的用法

  1. create table test_1(
  2. name varchar(100)
  3. ,age varchar(100)
  4. );
  5. insert into test_1 values ('张三',15);
  6. insert into test_1 values ('李四',16);
  7. insert into test_1 values ('王五',17);
  8. insert into test_1 values ('张六',21);
  9. create table test_2(
  10. name varchar(100)
  11. ,id varchar(100)
  12. );
  13. insert into test_2 values ('张三',18);
  14. insert into test_2 values ('张三',1);
  15. insert into test_2 values ('李四',19);
  16. insert into test_2 values ('王五',20);

 

 CROSS APPLY 相当于join

  1. SELECT *
  2. FROM TEST_1 AS C
  3. CROSS APPLY (SELECT TOP 1 *
  4. FROM TEST_2 AS O
  5. WHERE C.NAME=O.NAME
  6. ORDER BY ID ASC
  7. ) AS CA
  8. 取TEST_1表与TEST_2表使用name字段进行join关联,取TEST_2表id的第一条
  9. --------------相当于row_number的写法-------------
  10. SELECT T.NAME1,T.AGE,T.NAME,T.ID
  11. FROM(SELECT ROW_NUMBER() OVER(PARTITION BY O.NAME ORDER BY O.ID ASC) AS RN
  12. ,C.NAME AS NAME1,C.AGE,O.NAME,O.ID
  13. FROM TEST_1 AS C
  14. JOIN TEST_2 AS O
  15. ON C.NAME=O.NAME
  16. )T
  17. WHERE RN=1
  18. order by T.ID ASC

 OUTER APPLY相当于left join

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

(sqlserver2012开始支持contract的用法)

7、STUFF的用法

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

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

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/568916
推荐阅读
相关标签
  

闽ICP备14008679号