首页 技术 正文
技术 2022年11月23日
0 收藏 588 点赞 4,872 浏览 10347 个字

前些日子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:递归查找   根据父节点查找子节点数据/子节点查找父节点数据

sql 小全

根据这张图片,你大概已经知道表是什么结构的了吧。

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 小全

特别注意

由于大家表结构可能一致,数据也看似一致可能会导致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

sql 小全

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 tbselect 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

sql 小全

32:批量更数据库字段的部分数据

update 表的名称 set 此表要替换的字段名=REPLACE(此表要替换的字段名, '原来内容', '新内容')update [eku_WholeData_{0}] set Voltage =REPLACE(Voltage, Voltage, STUFF(Voltage, charindex('\"key',Voltage), 45, '')) where Voltage like '%\"key%' 

sql 小全

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 onselect * from dbo.EKU_PrimaryDataFilesset statistics time off

sql 小全

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

sql 小全

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

sql 小全

38:存储过程

--创建有参存储过程
create proc p_BookAdd
@Name varchar(30)
as
insert into books(book_name)values(@Name)
go--sqlserver 执行存储过程测试,图中给【作者】创建了默认值,所以作者字段有默认值exec p_BookAdd '测试书名称'

sql 小全

  •  创建无参存储过程
--、不带参数的存储过程,获取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 输出的值

sql 小全

  • 存储过程返回多个结果

    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

    sql 小全

39:函数

sql 小全

  

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,954
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,479
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,291
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,108
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,740
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,774