sql 2008常用语法语句收集
EXEC sp_dropuser 'test' : 从当前数据库删除用户 test
EXEC sp_droplogin 'test' : 从 SQL Server 中删除登录 test
select @@servername :查看本机sql 2008实例名
set quoted_identifier off :关闭双引号识别
sp_who :查询当前使用用户,进程
sp_helptext 函数或者触发器或者存储过程名 :查看代码
sp_helpindex 'table' 查看索引
kill 进程号
dbcc showcontig('u_table') --检查表碎片
DBCC DBREINDEX ('u_table','',90) --优化表重建索引 sp_spaceused :查看当前数据库大小
dbcc checkdb 检查数据库是否有错,是否损坏
select serverproperty('productlevel') --检查是否打了SP4补丁,如果没有打过SP4,则为RTM,否则显示的是SP4版本。
select DATABASEPROPERTYEX('master','version') --查看当前SQL版本号 建表前的判断语句:
if object_id('a') is not null drop table a
create table a(times datetime)
select * from sysobjects --系统对象表
xtype: u表;v视图; p:过程 fn:函数 tr:触发器
select * from sysindexes –查看索引
select * from syscolumns --系统字段表
select * from syscolumns where object_id('u_ware_q')=id
select * from syscolumns where object_name(id) = 'u_ware_q'
select object_name(id),* from syscolumns where object_name(id)='u_ware_p' --根据某个字段查出是哪个表
select * from sysobjects a, syscolumns b where a.id=b.id and b.name = 'maxunit' --查看使用某字段的所有表
select * from syscomments --函数,触发器等的代码
例:查所有触发器 存储过程有发短信的代码
select object_name(id) from syscomments where text like '%短信'
select * from syscolumns where id=object_id('u_ware_q')
select system_user --当前操作系统用户
select user --当前数据库登录用户
SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_NAME='u_ware_q' --查看表的主键
sp_helptext p_物流发送后发短信 --显示所有封装后的代码
用SQL语句查找包含有某个关键字的存储过程、触发器、函数等等,SQL语句如下:
select OBJECT_NAME(id) as 存储过程,id from syscomments
where id in (select object_id(name) from dbo.sysobjects where type='P' --存储过程为P)
and text like '%FieldName%' --关键字
group by id --查表依赖关系
select a.* from sysobjects a, syscomments b where a.id =b.id and b.text like '%u_store_i%'
--断开所有链接
DECLARE @sql VARCHAR(4000)
SET @sql= ''
SELECT @sql = @sql + ' kill ' + CAST(spid AS VARCHAR) + CHAR(13)
FROM master.sys.sysprocesses WHERE dbid = db_id( 'CMDK_DEV')
EXEC(@sql) EXEC sp_executesql @sql xtype:对象类型。可以是下列对象类型中的一种:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
L = 日志
FN = 标量函数
IF = 内嵌表函数
P = 存储过程
PK = PRIMARY KEY 约束(类型是 K)
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
UQ = UNIQUE 约束(类型是 K)
V = 视图
X = 扩展存储过程 --常用函数
select len('我是中国人') --取字符串
select datalength('我是中国人sddsfs') --取长字符串长度
select dbo.f_left('我是中国人sdflskfsjkl',6) --取字符串:我是中 只在海典系统中使用
select left('我是中国人sdfksfls',6) --取字符串:我是中国人a,汉字作为一个字符
select replace('我是中国人lkklkl','国','asdd') --替换
select REPLACE (' 处方信' ,' ','') --去掉字符串中所有空格
select rtrim('我是中国人 ') --去掉右空格
select ltrim(' 我是中国人') --去掉左空格
select right('test-tsss',charindex('-','test-tsss')-1) --取'-'第一次开始的右边所有字符
select isnumeric('222ss--2sdsd') -- select isnumeric('s222s') --当输入表达式得数为一个有效的整数、浮点数、money 或decimal 类型,那么ISNUMERIC 返回;否则返回。返回值为确保可以将expression 转换为上述数字类型中的一种。但是此函数存在Bug,就是'234a2342'同样会认为是数字类型可以替代的写法是
select PATINDEX('%[^0-9]%', '') --等于0为纯数字--如果返回值大于0,则有非数字字符。
--对于支持小数点和正负数写法是
select PATINDEX('%[^0~9|.|-|+]%','22.22')
select patindex('%[吖-座]%','2221在sss') --有中文返回5
select patindex('%[d]%','rcrdsddddaadadffdr')
--返回,[]中d在字符串rcrdsddddaadadffdr的第一次出现的位置。
select patindex('%[cd]%','rcrdsdddrdaadadffdr')
--返回,[]中c,d在其中一个的位置,返回最先出现的这个位置,c在此字符串里第一次出现位置是,而d是,结果取最先的那个。
select patindex('%[sd]%','rcrdsdddrdaadadffdr')
--返回,[]中c,d在其中一个的位置,返回最先出现的这个位置,s在此字符串里第一次出现位置是,而d是,结果取最先的那个。
select patindex('%[^r]%','rrrdsdddrdaadadffdr')
--返回,除[]中的字符串的匹配字符,第一次出现d不在[^r]里,所以就找到第一次这位。
select patindex('%[^rd]%','rrrdsdddrdaadadffdr')
--返回,除[]中的字符串的匹配字符,第一次出现s不在[^rd]里,所以就找到第一次这位。
select patindex('%[^rsd]%','rrrdsdddrdaadadffdr')
--返回,除[]中的字符串的匹配字符,第一次出现a不在[^rsd]里,所以就找到第一次这位。
max() --取最大值min() --取最小值sum() --求和count() --统计记录数
select accdate,sum(realamt),max(realamt),min(realamt),count(realamt)
from r_sale
where accdate>'2011-01-15 00:00:00.000' and accdate < '2011-01-25 00:00:00.000'
group by accdate
having sum(realamt) > 60000
字符截取:left()、right()、substring()、charindex()
select SUBSTRING(warename,1,4) from u_ware --取字符串,从第1个字符开始至第4个结束
select SUBSTRING(CONVERT(text,'在s在在夺要'),1,5) --截取中英混合的字符串(中文和字母)
select 5000/10000.0 --想变成.5
select 5500/10000.0 --想变成.55
select 5550/10000.0 --想变成.555
select 5555/10000.0 --想变成.5555
其结果分别为:0.5000000 0.5500000 0.5550000 0.5555000
select 15%4 结果为 判断是否整除,是否整数倍
select 15%5 结果为
一、如果想去掉数字后面多余的 ,需要转化一下:
--取随机数
select ceiling(10 * rand())
select rand()
select ceiling(RAND()*(60-20)+20) --随机生成20-60之间的一个整数
select CONVERT(FLOAT,5000/10000.0) --想变成.5
select CONVERT(FLOAT,5500/10000.0) --想变成.55
select CONVERT(FLOAT,5550/10000.0) --想变成.555
select CONVERT(FLOAT,5555/10000.0) --想变成.5555 其结果分别为: 0.5 0.55 0.555 0.5555
--Sql截取浮点小数位数,不四舍五入
round(551.239567,2,0)
结果:551.24 round(551.239567,2,1)
结果:551.23 --第一个表示截取位
--第二个,1分别表示是四舍五入,0以外是截取
select cast(19.001 as int) --数字型取整数部分
select 19.001 - cast(19.001 as int) --数字型取小数部分
select distinct wareid from u_store_m --过滤重复记录 唯一
select space(10) --返回个空格字符串
--两个数据集连接
select wareid from u_accept_c
union all
select wareid from u_store_m where symqty>1000
--存在于某个数据集值in 、not in
select * from u_ware_q where wareid in('','')
select * from u_ware_q where wareid not in(select wareid from u_ware_class where classcode ='')
--存在于某个数据集exists 、not exists ,尽量用这个优化数据集查询速度,可用在多表操作
select * from u_ware_q a where exists(select 1 from u_sale_c b where a.wareid = b.wareid) --查询没有销售记录的商品 --查看表约束
sp_helpconstraint d_ware_print
--修改 删除主键
alter table 表名 drop constraint 约束名/主键名 --给字段默认值
ALTER TABLE [dbo].[u_ware_q] ADD DEFAULT (0) FOR [pile] if col_length('c_dyscript','projectid') is null
alter table c_dyscript add projectid int default 0
go
update c_dyscript set projectid = 0 where projectid is null
go
if exists(select * from syscolumns where id = object_id('c_dyscript') and name = 'projectid' and isnullable = 1)
alter table c_dyscript alter column projectid int not null
go
declare @sql_20140317 nvarchar(1000)
select @sql_20140317 = 'alter table c_dyscript drop constraint [' + name + ']' from sysobjects where parent_obj = object_id('c_dyscript') and xtype = 'pk'
exec(@sql_20140317)
go
alter table c_dyscript add primary key(winname,projectid,control,event)
go select floor(11.23) --返回小于或等于所给数字表达式的最大整数。向下取整
select ceiling(11.23) --向上取整数四舍五入
select round(11.23334,2) --取两位小数
select abs(112.22),abs(-112.33) --取绝对值
select max(stamp)+0 from d_ecs_order_info
select convert(int max(stamp)) from d_ecs_order_info 显式转换
cast((c.supply_qty+0.0)/isnull(a.supply_sumqty,1) as numeric(16,4)) –两个整数相除得行小数的方法 isnull(可能为空字段,'') : sql判断是否为空的写法,如果字段为空的话,就赋''给某个字段。
IDENTITY(int,1,1) :在表中插入递增数
Case 用法:以计算毛利为例:
select case when saleprice =0 then 0 else (saleprice -purprice)/ saleprice end as 毛利率
from u_sale_c
where 条件…. select LTRIM(RTRIM(str(商品编码)+'')),商品名称,商品规格
,case when isnull(生产企业,'')='' then '' else 生产企业 end
from 商品资料测试
时间字段转换
select CONVERT(varchar(12),execdate,23)from u_distapply_m where CONVERT(varchar(12),execdate,23)='2014-05-06' --取时间字段中的日期
CONVERT(varchar(25),dateadd(day,-2,execdate),21 ) --取日期的前两天
datediff(dd,r_sale.accdate,dateadd(mm,1,r_sale.accdate)) –计算当月天数
select datediff(dd,'2016-01-01',getdate()) --从某天至现在的天数
SELECT CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
SELECT CONVERT(varchar(100), GETDATE(), 1): 05/16/06
SELECT CONVERT(varchar(100), GETDATE(), 2): 06.05.16
SELECT CONVERT(varchar(100), GETDATE(), 3): 16/05/06
SELECT CONVERT(varchar(100), GETDATE(), 4): 16.05.06
SELECT CONVERT(varchar(100), GETDATE(), 5): 16-05-06
SELECT CONVERT(varchar(100), GETDATE(), 6): 16 05 06
SELECT CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
SELECT CONVERT(varchar(100), GETDATE(), 8): 10:57:46
SELECT CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
SELECT CONVERT(varchar(100), GETDATE(), 10): 05-16-06
SELECT CONVERT(varchar(100), GETDATE(), 11): 06/05/16
SELECT CONVERT(varchar(100), GETDATE(), 12): 060516
SELECT CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
SELECT CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
SELECT CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
SELECT CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
SELECT CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
SELECT CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
SELECT CONVERT(varchar(100), GETDATE(), 24): 10:57:47
SELECT CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
SELECT CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
SELECT CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
SELECT CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
SELECT CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
SELECT CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
SELECT CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
SELECT CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
SELECT CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
SELECT CONVERT(varchar(100), GETDATE(), 108): 10:57:49
SELECT CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
SELECT CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
SELECT CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
SELECT CONVERT(varchar(100), GETDATE(), 112): 20060516
SELECT CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
SELECT CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
SELECT CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
SELECT CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49:000
select CONVERT(datetime,'2015-06-04 10:46:21', 20) 字符转换为日期
select dateadd(dd,-day(dateadd(month,-1,getdate()))+1,dateadd(month,-1,getdate()))/*上个月一号*/
select dateadd(dd,-day(getdate()),getdate()) /* 上月月底*/
select dateadd(dd,-day(getdate())+1,getdate()) /* 本月一号*/
select dateadd(dd,-day(dateadd(month,1,getdate())),dateadd(month,1,getdate()))/* 本月底*/
select dateadd(dd,-day(dateadd(month,1,getdate()))+1,dateadd(month,1,getdate())) /* 下月一号*/
select dateadd(dd,-day(dateadd(month,2,getdate())),dateadd(month,2,getdate())) /* 下月月底*/
select dateadd(month,-1,getdate()) --取前一个月/上一个月 ,case when DATEPART(weekday,accdate1)=7 then '星期六' --计算星期几
when DATEPART(weekday,accdate1)=1 then '星期天'
else '' end as '备注'
select * from u_dist_m where DATEDIFF(DAY,createtime,GETDATE())<=15
--取最近15天的记录
--取前推7天的请货数,从昨天开始计算
select a.execdate
from u_distapply_m a,u_distapply_c b
where a.applyno=b.applyno and status=1
and convert(varchar(10),a.execdate,23)
between convert(varchar(10),dateadd(day,-7,GETDATE()),23)
and convert(varchar(10),dateadd(day,-1,GETDATE()),23) select * from u_distapply_m a where --按时间段查询数据,在存储过程动态报表中常用
a.execdate between '2017-10-12' and dateadd(ms,-3,dateadd(dd,1,'2017-10-13')) select @day = DATEPART(dd,getdate()) --取日期号数
--逢会员日,打折,不积分
if @day in(8,18,28)
select filename from master.dbo.sysdatabases where name = '数据库名' --查看数据库文件存放位置
DATEDIFF(dd,CONVERT(varchar(12),createtime,23),getdate())>=7 --大于当前日期天含天的日记录
select stamp+0 from u_dist_m where distno='单号' --取时间戳
select wareid,stamp+0,DATEADD(second,stamp+0+ 8 * 3600,'2013-01-01 00:00:00') from u_ware_q where wareid='' –时间戳转日期
select a.wareid,b.warename from hydee_2004..u_ware_q a,hydee_连锁..u_ware_q b where a.wareid=b.wareid --取不同数据库的表数据 sql中,两个比较函数用法:都可生成排序用1、ROW_NUMBER() over(order by wareid)
2、IDENTITY(bigint) --OPENQUERY 的用法:
OPENQUERY (linked_server, "INSERT INTO msgs(...) VALUES(...)");以上做法是不正确的,
正确做法如下:
SELECT 示例:SELECT * FROM OPENQUERY (linked_server, "SELECT * FROM msgs");
INSERT 示例:INSERT OPENQUERY ([192.168.0.200], 'SELECT title, content FROM msgs') VALUES ('title', 'content');
UPDATE 示例:UPDATE OPENQUERY ([192.168.0.200], 'SELECT title, content FROM msgs WHERE id=1') SET title = 'newTitle',content = 'newContent';
DELETE 示例:DELETE OPENQUERY ([192.168.0.200], 'SELECT id FROM msgs WHERE id=1');
--跨服务器更新数据
set quoted_identifier off
go
declare @warename varchar(20)
set @warename='测试商品名'
UPDATE OPENQUERY ([192.168.0.200], "select warename from hydee_fst..d_ware0209 where wareid=''") SET warename=@warename; 注意OPENQUERY 不接受参数变量,也就是说:DELETE OPENQUERY ([192.168.0.200], 'SELECT id FROM msgs WHERE id=' + @id);
是不正确的,但可以这样做:DELETE OPENQUERY ([192.168.0.200], 'SELECT id FROM msgs') WHERE id=@id); 。
T-SQL 中,INSERT 可以省略 INTO,DELETE 也可以省略 FROM。INSERT 时必须明确 SELECT 的字段。
sql 2008常用语法语句收集的更多相关文章
- SQL SERVER常用语法记录
用于记录SQL SERVER常用语法,以及内置函数. 以下语句包含: WITH 临时表语法 ROW_NUMBER()内置函数,我一般主要是用来分页.针对于查出来的所有数据做一个数字排序 分页的BETW ...
- SQL基础常用语法
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 DROP database dbname 3.说明:创建新表 create table ...
- SQL 2008 RAISERROR语法在SQL 2012/2014不兼容问题
原文 旧的RAISERROR语法在SQL 2012不兼容问题 raiserror 写法: SQL 2008: raiserror 55030 'text error' SQL 2012: raiser ...
- sql 操作常用操作语句 新增、修改字段等
常用sql --sql 事务 BEGIN TRAN 事物名 )BEGIN ROLLBACK TRAN 事物名;RETURN;END COMMIT TRAN 事物名 --数据库清缓存 DBCC DROP ...
- sql server 常用语法
--1 创建数据库 DROP DATABASE mydb1 CREATE DATABASE mydb1 ON ( NAME ='mydb1',FILENAME='D:\mydb1.mdf') LOG ...
- SQL其他常用的语句
阅读目录 一:汇总数据 1.理解AVG函数 2.理解COUNT()函数 3.理解max()函数 4.理解min()函数 5.理解sum()函数 二:分组数据 1 创建分组(group by) 2 HA ...
- SQL SERVER常用语法汇总
阅读目录 一.SQL分类 二.基础语句 三.sql技巧 四.(MS SQL Server)SQL语句导入导出大全 回到目录 一.SQL分类 DDL—数据定义语言(CREATE,ALTER,DROP,D ...
- php中一些常用的语句收集
清空数据表 truncate 表名; http://blog.knowsky.com/234205.htm 常用的SQL语句实例 http://blog.csdn.net/vericlong ...
- sql server常用语法点
if exists(select name from sysobjects where name = 'stuInfo')drop table stuInfogocreate table stuInf ...
随机推荐
- lnmp环境下 tp3.2 not found
最近将一个lamp环境下使用tp3.2 开发的项目迁移到本地了, 但是在打开项目的时候,提示 not found,经过多方面查找发现是伪静态问题,解决方法如下: 在nginx 域名配置文件我这里是[v ...
- 【SpringBoot】 项目中运用的一些技巧,mybatis-plus 自动编译等(持续更新)
前言 本文将总结项目中用到的一些springboot 的技巧,持续更新. Mybatis-Plus 的运用 使用原因: 主要是节省了Mapper层的编写,通过继承BaseMapper可以直接调用通用的 ...
- 【转】PyQt5系列教程(七)控件
PyQt5系列教程(七)控件 软硬件环境 Windows 10 Python 3.4.2 PyQt 5.5.1 PyCharm 5.0.4 前言 控件是PyQt应用程序的基石.PyQt5自带很多不 ...
- ngrinder压力测试
文章目录 另一篇 部署demo 写脚本 压力测试 目标主机监控 可能报错 总结: 另一篇 https://blog.csdn.net/dataiyangu/article/details/888518 ...
- PHP 调试 - Xdebug
PHP 调试指南.pdf PHP 程序员的调试技术 根据要调试的对象的不同,采取的方法也不一样: 调试 web 应用:对于 web 应用,可以在浏览器中安装插件,或者在 IDE 中设置,下面的设置二选 ...
- inclusion_tag 基本使用
inclusion_tag的用途 inclusion_tag可以实现从后台往前端传递绑定数据的样式,一般用来动态显示模板页面中显示固定格式的数据. inclusion_tag的用法 step1: 编写 ...
- MyEclipse下Junit报错"The input type of the launch configuration"
MyEclipse下Junit运行测试用例的时候报错: "The input type of the launch configuration does not exist" 原因 ...
- Eclipse Kepler安装WST Server Adapter后创建Server无Tomcat解决方法
在Eclipse Kepler下安装完WST Server Adapter后,创建Server时发现没有Tomcat服务器的选项,这个问题解决起来很简单, 只需要安装一下JST Server Adap ...
- CodeForces 711D Directed Roads (DFS找环+组合数)
<题目链接> 题目大意: 给定一个$n$条边,$n$个点的图,每个点只有一条出边(初始状态),现在能够任意对图上的边进行翻转,问你能够使得该有向图不出先环的方案数有多少种. 解题分析: 很 ...
- Metasploitable2使用指南
Metasploitable2使用指南 Metasploitable2 虚拟系统是一个特别制作的ubuntu操作系统,本身设计作为安全工具测试和演示常见漏洞攻击.版本2已经可以下载,并且比上一个版本包 ...