sql 小全
前些日子sql用到哪里写到哪里,乱七八糟,今天整理了一下,以作备份(虽然开通博客已经八个月了,但是今天还是第一次发表博文,好紧张啊~~)
--2014.08.27号整理sql语句
1:进入数据库
use [数据库名]
eg: use [dev]
2:创建表
create table 表名(
[ID] int identity(1,1) primary key,
[列名] 数据类型 约束 ,
)
eg:
create table atblTest1(
[ID] int identity(1,1) primary key, --从1开始每次增加1
[Key] varchar(200) unique ,
[Value] decimal(18,4) , --小数点后面保留四位小数,数据长18位(不加小数点位)
[Unit1] varchar(100), --Message text, --Time datetime --[count] int,
)
3:操作现有表/字段
--修改字段数据类型
alter table 表名 alter column 字段名 字段类型 --删除字段出现约束什么错误
ALTER TABLE 表名 DROP CONSTRAINT 默认约束名
GO
ALTER TABLE 表名 DROP COLUMN 字段名
GO
--获取默认约束名
select name
from sysobjects
where id=(select cdefault
from syscolumns
where name='字段名' and id = (select id
from sysobjects
where name = '表名'))
--添加字段
alter table 表名 add 字段名 字段类型 --不允许空字符:
alter table 表名 add 新字段 字段类型 not NULL --允许空字符:
alter table 表名 add 新字段 字段类型 NULL --修改字段
exec sp_rename '表名.原列名','新列名','column' --修改表名
exec sp_rename '旧表名', '新表名'
eg:
exec sp_rename 'atblTest1', 'atblTest'
exec sp_rename 'atblTest.Unit1','Unit','column'
alter table atblTest alter column [Unit] varchar(200)
alter table atblTransactions add IsInsertAccounting bit
alter table atblMembers add AccountUserId int
alter table atblAccounts add PendingBalance money
4:添加数据
insert into 表名(列名1,列名2,列名3) values(数据1,数据2,数据3)
eg:
insert into atblTest values('LOBcheckFee',3,'dollars')
5:更改数据
update 表名 set 列名 = 列名数据 where id=标识数据
eg:
update atblTest set [Unit] ='dollar' where [ID]=1
6:创建触发器 (就不连贯着来发例子了啊)
create trigger 触发器名 --创建触发器名字
on 触发器所在表 --在这个表中创建触发器
for Update -- 因为哪个事件而触发(insert ,update,delete)
as --事件触发后所做的事情
if Update(该表字段) --如果修改XX字段
begin
引发的sql操作
end
eg:(主要是如果ablLeads表QuantityOnHand数量改变,就会将改变的过程存到另一个表中:1-->0)
create trigger trQuantityOnHand
on atblLeads
for Update
as
if Update(QuantityOnHand)
begin
declare @QuantityOnHandOld int, @QuantityOnHandNew int,@LeadID int; select @QuantityOnHandNew=QuantityOnHand,@LeadID=LeadID from inserted; select @QuantityOnHandOld=QuantityOnHand from deleted; if(@QuantityOnHandOld != @QuantityOnHandNew)
begin
insert into atblTrigger([Type],[Time],[Result],[LeadID])
values('QuantityOnHand',getdate(),convert(varchar, @QuantityOnHandOld)+' -> '+convert(varchar,@QuantityOnHandNew),@LeadID);
end
end
7:删除触发器
if(object_id('触发器名称') is not null)
drop trigger 触发器名称 if(object_id('trQuantityOnHand') is not null)
drop trigger trQuantityOnHand
8:对表数据分页
select * from
(
select * , row_number() over
(
order by
某种规律的字段名(id)
) as rownum
from 表名
)DATA
where DATA.rownum>开始页码*每页列显数量 and DATA.rownum<开始页码*每页列显数量+每页列显数量
eg:列显第六页的数据即600-610之间的数据
select * from
(
select * , row_number() over
(
order by
LEADID
) as rownum
from atblLeads
)DATA
where DATA.rownum>60*10 and DATA.rownum<60*10+10
9:删除表
drop table 表名
-----如果表存在就drop掉-----------
if exists (select 1
from sysobjects
where id = object_id('表名')
and type = 'U')
drop table 表名
go
--eg:
if exists (select 1
from sysobjects
where id = object_id('[dbo].[db3_IndexingDetails]')
and type = 'U')
drop table [dbo].[db3_IndexingDetails]
go
注意:
--truncate 删除内容,并释放空间,并不删除表结构,删除标识列,标识列重新从1开始
--delete 删除内容,不释放空间,不删除表结构,不删除标识列,标识列继续增加
--drop 直接删除表
10:控制sql修改数量
eg:
begin tran
update atblOrders set OrderStatus = 2 where EbayOrderID = '131235536269-0'
if(@@ROWCOUNT>1) --@@ROWCOUNT 是受影响的行数
begin rollback tran
print 'sql超过了指定的受影响行数,将不会执行该语句'
end
else if(@@ROWCOUNT=0)
begin
print '执行失败'
end
else
begin commit tran
print '恭喜你执行完成'
end
11:获得行数
select count(*) from 你的表名
12:获得列名以及详细数据
select * from syscolumns where id = object_id('表名')
eg:
select * from syscolumns where id = object_id('atblUsers')
13:获得列名数量
select count(*) from syscolumns where id=object_id('你的表名')
14:读取库中的所有表名
select name from sysobjects where xtype='u'
15:读取指定表的所有列名
select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and name='表名')
16:获取字段类型
select t.name from sysobjects o,syscolumns c,systypes t
where o.id=c.id and c.usertype=t.usertype and o.name='表名' and c.name='列名'
17:Select语句 区分查询数据的大小写
--不区分大小写(默认不区分)
select top 10 * from atblUsers where [Password]='sunflower134' COLLATE Chinese_PRC_CI_AS
eg:--区分大小写 针对某个字段
select top 10 * from atblUsers where [Password]='sunflower134' COLLATE Chinese_PRC_CS_AS AND Status=1
18:数据查询
eg:
select TransactionID,AccountID,TransactAmount,TransactDate,TransactType,
Credit = CASE WHEN TransactAmount = 0 THEN 0 WHEN TransactAmount > 0 THEN TransactAmount END, --(添加的列显字段)
Debit = CASE WHEN TransactAmount = 0 THEN 0 WHEN TransactAmount < 0 THEN -TransactAmount END
FROM [atblAccounting]
WHERE [AccountID] = 53 order by TransactDate DESC ,TransactType desc
select Sum(TransactAmount) from atblAccounting where AccountID=54
select TOP 200 * from atblAccounting order by TransactionID DESC
select b.IsInsertAccounting, * from atblAccounting a
inner join atblTransactions b on a.ebayOrderID=b.eBayOrderID and a.ItemID = b.ItemID
select count(*) from atblUsereBayAuthToken
19:删除表中的所有数据
DELETE FROM 表名
20:查询SQLserver的详细版本信息
select @@VERSION
21:递归查找 根据父节点查找子节点数据/子节点查找父节点数据
根据这张图片,你大概已经知道表是什么结构的了吧。
a)-递归查找数据 这是从父节点到子节点的递归(需要限制大小)
with cte as(
select CategoryID,CategoryName,CategoryParentID ,CategoryLevel
from atbleBayCategories
where CategoryID ='6000'
union all
select a.CategoryID,a.CategoryName,a.CategoryParentID,a.CategoryLevel from atbleBayCategories a
inner join cte b on a.CategoryParentID = b.CategoryID
)
select top 100 * from cte
b)--子节点到父节点(逆向递归)
with temp as(
select *
from atbleBayCategories
where CategoryID ='33636'
union all
select a.* from atbleBayCategories a
inner join temp b on a.CategoryID = b.CategoryParentID where a.CategoryID != b.CategoryID
)
select * from temp
特别注意
由于大家表结构可能一致,数据也看似一致可能会导致sql运行错误(就因为之前没有加上这句:a.CategoryID != b.CategoryID,导致sql死循环,执行不成功,楼主当时都准备改表结构了..)
22:设置表中A字段数据=B字段数据:
情景:当用户修改商品信息,需要将修改的数据显示在最前方,假设数据库没有DateModify这个字段,你需要添加这个字段,并且设置这些DateModify数据:
Update tableName set DateModify = DateCreate
23:复制表A数据到表B中
1.INSERT INTO SELECT语句
语句形式为:
Insert into Table2(field1,field2,...) select value1,value2,... from Table1
2.SELECT INTO FROM语句
语句形式为:
SELECT vale1, value2 into Table2 from Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中
24:查询数据库中的存储过程是否存在某文本内容
SELECT ROUTINE_NAME, ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%text%'
AND ROUTINE_TYPE='PROCEDURE'
查找存储过程包含某文字
select name
from sysobjects o, syscomments s
where o.id = s.id
and text like '%sp_WidgetCrossTabTables%'
and o.xtype = 'P'
25:替换表中某列字段
update 表名 set 字段名=replace(字段名,'aaaa','cccc');
eg:
aaaaxxxbbb 变成 ccccxxxbbb
aaaamtbbb 变成 ccccmtbbb
26:获取具体月份的数据
SELECT CreateDate as time, * FROM [EKU_PrimaryData]
where DATEPART(YEAR,CreateDate) = 2017 and MONTH(CreateDate) in( 10,11)
order by CreateDate
--最近一个月
SELECT DATEADD(month, -1, getdate()) --上个月
select convert(varchar(7),dateadd(month,-1,getdate()),120)
27:partition by 分组
select eBayItemID,Cost,FreeShipping from ( --根据ebayitemid分组,价格从高到低排序 并标上序号 最后取第一行
select row_number() over( partition by eBayItemID order by cost desc) as rn,*
from [440294_Iguide].[dbo].[atbleBayItemUSShippingServices] --where ebayitemID =105490
--where len(FileName)>0 )
as t
where t.rn=1
28:总数据:db1, 不在db2 ,在db3, 获取数据
with db1 as( select t1.Id, t1.ReferenceNumber, t2.ID as InventoryId, t1.UserName from post_GoAntiques t1 left join EuroLuxProductBE.dbo.pdt_Inventory t2 on t1.ReferenceNumber=t2.ITEM ),
db2 as (--not in select ProductNumber from post_ProductCommon where WebSiteName='GoAntiques' ),
db3 as( -- in select min(Id) as Id from post_GoAntiques group by ReferenceNumber ) select * from db1 where db1.ReferenceNumber in ( select ReferenceNumber from db1 EXCEPT --去除db2的数据 SELECT ProductNumber as ReferenceNumber from db2
) and db1.ID in ( select id from db1 INTERSECT-- 取db3的交集 SELECT id from db3 )
29:sqlserver库占用大小
SELECT DB_NAME(database_id) AS [Database Name],[Name] AS [Logical Name],[Physical_Name] AS [Physical Name],((size * 8) / 1024) AS [Size(MB)],
[differential_base_time] AS [Differential Base Time]
FROM sys.master_files
30:一个积分等级表,一个用户积分表。获取用户属于哪个等级: left outer join
select * from [TianYaDemo].[dbo].[Vip_ScoreLogs]
left outer join [TianYaDemo].[dbo].[Vip_ScoreGrade] as sg on TotalValue between MinValue and MaxValue
31:行列转换
create table tb
(
Name varchar(10) ,
Subject varchar(10) ,
Result int
);
insert into tb(Name , Subject , Result) values('张三' , '语文' , 74)
insert into tb(Name , Subject , Result) values('张三' , '数学' , 83)
insert into tb(Name , Subject , Result) values('张三' , '物理' , 93)
insert into tb(Name , Subject , Result) values('李四' , '语文' , 74)
insert into tb(Name , Subject , Result) values('李四' , '数学' , 84)
insert into tb(Name , Subject , Result) values('李四' , '物理' , 94) select * from tb select name 姓名,
max(case subject when'语文'then result else 0 end) 语文,
max(case subject when'数学'then result else 0 end) 数学,
max(case subject when'物理'then result else 0 end) 物理
from tb
--where 数学='83'
group by name
32:批量更数据库字段的部分数据
update 表的名称 set 此表要替换的字段名=REPLACE(此表要替换的字段名, '原来内容', '新内容') update [eku_WholeData_{0}] set Voltage =REPLACE(Voltage, Voltage, STUFF(Voltage, charindex('\"key',Voltage), 45, '')) where Voltage like '%\"key%'
33:统计库中每个表的行数
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
34:插入10w条数据
INSERT INTO Department(name,[Company],groupname) VALUES('销售部','中国你好有限公司XX分公司','销售组')
GO 100000
35:输出sql执行的时间
set statistics time on select * from dbo.EKU_PrimaryDataFiles set statistics time off
36:sql server 规则使用
创建规则->将规则绑定到表上-->测试规则(插入不满足的条件测试)-->取消绑定规则
--创建规则:价格要在0-1000以内
go
create rule rule_Price
as
@price >0 and @price<1000 --查询表
select * from books --将规则绑定到表上
exec sp_bindrule 'rule_Price','books.book_price' --这里insert的数据不满足规则,会报错
insert into books values('三国演义',1001,'罗贯中') --取消绑定
exec sp_unbindrule 'books.book_price' --再去执行即可insert成功
insert into books values('三国演义',1001,'罗贯中') --删除规则
drop rule rule_price
37:默认值设置
设置默认值 -->将默认值绑定到某表某列 --->测试---> 取消默认值绑定 --->删除默认值
--查询表
select * from books --设置默认值
create default defaultBookAuth as '作者不详' --将默认值绑定到表列
exec sp_bindefault 'defaultBookAuth' ,'books.book_auth' insert into books(book_name) values('不存在的人2019') --查询表
select * from books --取消绑定
exec sp_unbindefault 'books.book_auth' --删除默认值
drop default defaultBookAuth
38:存储过程
--创建有参存储过程
create proc p_BookAdd
@Name varchar(30)
as
insert into books(book_name)values(@Name)
go --sqlserver 执行存储过程测试,图中给【作者】创建了默认值,所以作者字段有默认值 exec p_BookAdd '测试书名称'
- 创建无参存储过程
--、不带参数的存储过程,获取MyStudentInfo表的所有记录
CREATE proc Proc_GetInfo
as
select * from MyStudentInfo20190311
go --执行存储过程
exec Proc_GetInfo
go
- 创建带输入参数的存储过程
CREATE proc Proc_InsertData
@Id int,
@Name varchar(16),
@Age int,
@Gender varchar(2),
@Phone varchar(16),
@Address varchar(50),
@GradeId int,
@Score int
as
begin
insert INTO MyStudentInfo20190311 VALUES(@Id,@Name,@Age,@Gender,@Phone,@Address,@Gender,@Score)
end
- 创建带默认值的输入参数的存储过程
CREATE proc Proc_InsertDefault
@Id int,
@Name varchar(16),
@Age int,
@Gender varchar(2)='',
@Phone varchar(16),
@Address varchar(50)='沈阳',
@GradeId int,
@Score int
as
begin
insert INTO MyStudentInfo20190311 VALUES(@Id,@Name,@Age,@Gender,@Phone,@Address,@Gender,@Score)
end
- 创建带输出参数的存储过程(根据输入的ID返回名字)
create proc Proc_Out
@Id int,
@Name varchar(200) out
as
begin
select @Name=Name from MyStudentInfo20190311 where id=@id
end--sql执行存储过程 declare @Name nvarchar(200)
exec Proc_Out 1 , @Name out
select @Name as 输出的值
- 存储过程返回多个结果
create proc Proc_Page
@StartIndex int,
@EndIndex int
as
begin
select COUNT(*) as 总数 from MyStudentInfo20190311
select * from (
SELECT ROW_NUMBER() OVER(ORDER BY Id) AS rowid,* FROM MyStudentInfo20190311 ) temp
where temp.rowid between @StartIndex AND @EndIndex
end --sql调用存储过程
exec Proc_Page 1,2
39:函数
sql 小全的更多相关文章
- SQL Server全时区转换
SQL Server全时区转换 假如你的应用程序是跨国(例如跨国银行交易)使用的话,那么数据库的一些国际化特性支持可以说是非常重要 其中最常见的就是各国时区上的差异,由于SQL Server getd ...
- SQL转换全角/半角函数
/****** SQL转换全角/半角函数 开始******/ CREATE FUNCTION ConvertWordAngle ( ), --要转换的字符串 @flag bit --转换标志,0转换成 ...
- SQL小汇总
SQL小汇总 1.对每个时段的数据进行统计2.查询时间条件(to_date)3.插入序列号和系统时间4.查询当天.7天内.30天内5.查询前后x小时.分钟.天.月.6.保留小数点后4位7.查询字段A中 ...
- ICANN认证注册商小全 英、德、法
转载 在ICANN认证注册商小全(一)和ICANN认证注册商小全(二)中,QQPCC介绍了美洲的各ICANN认证注册商.今天我们移师欧洲,介绍欧洲的ICANN认证注册商,欧洲的注册商也很多,不可能在一 ...
- SQL转换全角和半角函数
SQL转换全角和半角函数 CREATE FUNCTION f_Convert( ), --要转换的字符串 @flag bit --转换标志,0转换成半角,1转换成全角 )) AS BEGIN ),@s ...
- windows蓝屏错误小全
作者:siyizhu 日期:2005-11-27 字体大小: 小 中 大 引用内容 0 0x00000000 作业完成. 1 0x00000001 不正确的函数. 2 0x00000002 系统 ...
- sql server 全角与半角字符转换
/****** SQL转换全角/半角函数 开始******/CREATE FUNCTION ConvertWordAngle ( @str NVARCHAR(4000), --要转换的字符串 @f ...
- linux常用命令与实例小全
转至:https://www.cnblogs.com/xieguohui/p/8296864.html linux常用命令与实例小全 阅读目录(Content) 引言 一.安装和登录 (一) ...
- java面试题小全
面向对象的特征有哪些方面 1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题,而6. 只是选择其中的 ...
随机推荐
- Bit Manipulation-leetcode
Bit Manipulation Find the Difference /* * Given two strings s and t which consist of only lowercase ...
- 如何用上新版本的 IDEA(IDEA 2019.2.2版本)
转载请注明出处 电脑重装系统后,重新安装了最新版的IDEA发现,用原来的方式弄得话不成功.又下载了2018版本的,用原来的方式还是可以到2099年的.原来是IDEA现在很重视这方面,原来的方法在新版本 ...
- ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用
上一章主要介绍了Autofac在MVC当中的具体应用,本章将继续简单的介绍下Autofac在普通的WebForm当中的使用. PS:目前本人还不知道WebForm页面的构造函数要如何注入,以下在Web ...
- django简单密码加密和效验
通过django自带的类库,来加密解密很方便,下面来简单介绍下: 导入包: from django.contrib.auth.hashers import make_password, check_p ...
- 这十个Python常用库,学习Python的你必须要知道!
想知道Python取得如此巨大成功的原因吗?只要看看Python提供的大量库就知道了 包括原生库和第三方库.不过,有这么多Python库,有些库得不到应有的关注也就不足为奇了.此外,只在一个领域里的工 ...
- docker redis实现主从复制
1.使用docker启动三个redis实例,容器名称分别为:myredis-master-6379,myredis-slave-6380,myredis-slave-6381.通过命令可以看到容器给三 ...
- WebViewJavascriptBridge的详细使用
参考链接: https://www.jianshu.com/p/d12ec047ce52 https://www.jianshu.com/p/ba6358b1eec3 有demo:https://ww ...
- 常用adb命令总结
前言 很早就想整理一下自己平时常用的一些adb命令,不仅为了便于以后查找,而且整理的过程自己又重新复习了一遍,但是当我开始在度娘一搜的时候,发现很多人已经写的非常详细了,尤其是当我发现了这篇adb概括 ...
- Python的range、enumerate和zip函数用法
range函数可创建一个整数列表.如果需要知道当前元素在列表中的索引,推荐用enumerate代替range.zip函数用于同时遍历多个迭代器. 一.range 函数 range函数可创建一个整数列表 ...
- 如何在mac版本的python里安装pip
mac里面python自带easy_install,在终端里面执行sudo easy_install pip.运行完可以用pip help测试一下是否安装成功,成功安装后,直接pip install ...