前些日子sql用到哪里写到哪里,乱七八糟,今天整理了一下,以作备份(虽然开通博客已经八个月了,但是今天还是第一次发表博文,好紧张啊~~)

--2014.08.27号整理sql语句

1:进入数据库

  1. use [数据库名]
  1. eg: use [dev]

2:创建表

  1. create table 表名(
  2. [ID] int identity(1,1) primary key,
  3. [列名] 数据类型 约束 ,
  4. )

eg:

  1. create table atblTest1(
  2. [ID] int identity(1,1) primary key, --从1开始每次增加1
  3. [Key] varchar(200) unique ,
  4. [Value] decimal(18,4) , --小数点后面保留四位小数,数据长18位(不加小数点位)
  5. [Unit1] varchar(100),
  6.  
  7. --Message text,
  8.  
  9. --Time datetime
  10.  
  11. --[count] int,
  12. )

3:操作现有表/字段

  1. --修改字段数据类型
  2. alter table 表名 alter column 字段名 字段类型
  3.  
  4. --删除字段出现约束什么错误
  5. ALTER TABLE 表名 DROP CONSTRAINT 默认约束名
  6. GO
  7. ALTER TABLE 表名 DROP COLUMN 字段名
  8. GO
  1. --获取默认约束名
  2. select name
  3. from sysobjects
  4. where id=(select cdefault
  5. from syscolumns
  6. where name='字段名' and id = (select id
  7. from sysobjects
  8. where name = '表名'))
  1. --添加字段
  2. alter table 表名 add 字段名 字段类型
  3.  
  4. --不允许空字符:
  5. alter table 表名 add 新字段 字段类型 not NULL
  6.  
  7. --允许空字符:
  8. alter table 表名 add 新字段 字段类型 NULL
  9.  
  10. --修改字段
  11. exec sp_rename '表名.原列名','新列名','column'
  12.  
  13. --修改表名
  14. exec sp_rename '旧表名', '新表名'

eg:

  1. exec sp_rename 'atblTest1', 'atblTest'
  2. exec sp_rename 'atblTest.Unit1','Unit','column'
  3. alter table atblTest alter column [Unit] varchar(200)
  4. alter table atblTransactions add IsInsertAccounting bit
  5. alter table atblMembers add AccountUserId int
  6. alter table atblAccounts add PendingBalance money

4:添加数据

  1. insert into 表名(列名1,列名2,列名3) values(数据1,数据2,数据3)

eg:

  1. insert into atblTest values('LOBcheckFee',3,'dollars')

5:更改数据

  1. update 表名 set 列名 = 列名数据 where id=标识数据

eg:

  1. update atblTest set [Unit] ='dollar' where [ID]=1

6:创建触发器 (就不连贯着来发例子了啊)

  1. create trigger 触发器名 --创建触发器名字
  2. on 触发器所在表 --在这个表中创建触发器
  3. for Update -- 因为哪个事件而触发(insert ,update,delete)
  4. as --事件触发后所做的事情
  5. if Update(该表字段) --如果修改XX字段
  6. begin
  7. 引发的sql操作
  8. end

eg:(主要是如果ablLeads表QuantityOnHand数量改变,就会将改变的过程存到另一个表中:1-->0)

  1. create trigger trQuantityOnHand
  2. on atblLeads
  3. for Update
  4. as
  5. if Update(QuantityOnHand)
  6. begin
  7.   declare @QuantityOnHandOld int, @QuantityOnHandNew int,@LeadID int;
  8.  
  9.   select @QuantityOnHandNew=QuantityOnHand,@LeadID=LeadID from inserted;
  10.  
  11.   select @QuantityOnHandOld=QuantityOnHand from deleted;
  12.  
  13.   if(@QuantityOnHandOld != @QuantityOnHandNew)
  14.   begin
  15.     insert into atblTrigger([Type],[Time],[Result],[LeadID])
  16.   values('QuantityOnHand',getdate(),convert(varchar, @QuantityOnHandOld)+' -> '+convert(varchar,@QuantityOnHandNew),@LeadID);
  17. end
  18. end

7:删除触发器

  1. if(object_id('触发器名称') is not null)
  2. drop trigger 触发器名称
  3.  
  4. if(object_id('trQuantityOnHand') is not null)
  5. drop trigger trQuantityOnHand

8:对表数据分页

  1. select * from
  2. (
  3. select * , row_number() over
  4. (
  5. order by
  6. 某种规律的字段名(id)
  7. ) as rownum
  8. from 表名
  9. )DATA
  10. where DATA.rownum>开始页码*每页列显数量 and DATA.rownum<开始页码*每页列显数量+每页列显数量

eg:列显第六页的数据即600-610之间的数据

  1. select * from
  2. (
  3. select * , row_number() over
  4. (
  5. order by
  6. LEADID
  7. ) as rownum
  8. from atblLeads
  9. )DATA
  10. where DATA.rownum>60*10 and DATA.rownum<60*10+10

9:删除表

  1. drop table 表名
  1. -----如果表存在就drop掉-----------
  2. if exists (select 1
  3. from sysobjects
  4. where id = object_id('表名')
  5. and type = 'U')
  6. drop table 表名
  7. go

--eg:

  1. if exists (select 1
  2. from sysobjects
  3. where id = object_id('[dbo].[db3_IndexingDetails]')
  4. and type = 'U')
  5. drop table [dbo].[db3_IndexingDetails]
  6. go

  注意:

--truncate 删除内容,并释放空间,并不删除表结构,删除标识列,标识列重新从1开始
--delete    删除内容,不释放空间,不删除表结构,不删除标识列,标识列继续增加
--drop      直接删除表

10:控制sql修改数量

eg:

  1. begin tran
  2. update atblOrders set OrderStatus = 2 where EbayOrderID = '131235536269-0'
  3. if(@@ROWCOUNT>1)   --@@ROWCOUNT 是受影响的行数
  4.   begin rollback tran
  5.     print 'sql超过了指定的受影响行数,将不会执行该语句'
  6.   end
  7. else if(@@ROWCOUNT=0)
  8.   begin
  9.     print '执行失败'
  10.   end
  11. else
  12.   begin commit tran
  13.   print '恭喜你执行完成'
  14. end

11:获得行数

  1. select count(*) from 你的表名

12:获得列名以及详细数据

  1. select * from syscolumns where id = object_id('表名')

eg:

  1. select * from syscolumns where id = object_id('atblUsers')

13:获得列名数量

  1. select count(*) from syscolumns where id=object_id('你的表名')

14:读取库中的所有表名

  1. select name from sysobjects where xtype='u'

15:读取指定表的所有列名

  1. select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and name='表名')

16:获取字段类型

  1. select t.name from sysobjects o,syscolumns c,systypes t
  2. where o.id=c.id and c.usertype=t.usertype and o.name='表名' and c.name='列名'

17:Select语句 区分查询数据的大小写

--不区分大小写(默认不区分)

  1. select top 10 * from atblUsers where [Password]='sunflower134' COLLATE Chinese_PRC_CI_AS

eg:--区分大小写 针对某个字段

  1. select top 10 * from atblUsers where [Password]='sunflower134' COLLATE Chinese_PRC_CS_AS AND Status=1

  

18:数据查询

eg:

  1. select TransactionID,AccountID,TransactAmount,TransactDate,TransactType,
  2. Credit = CASE WHEN TransactAmount = 0 THEN 0 WHEN TransactAmount > 0 THEN TransactAmount END, --(添加的列显字段)
  3. Debit = CASE WHEN TransactAmount = 0 THEN 0 WHEN TransactAmount < 0 THEN -TransactAmount END
  4. FROM [atblAccounting]
  5. WHERE [AccountID] = 53 order by TransactDate DESC ,TransactType desc
  1. select Sum(TransactAmount) from atblAccounting where AccountID=54
  1. select TOP 200 * from atblAccounting order by TransactionID DESC
  1. select b.IsInsertAccounting, * from atblAccounting a
  2. inner join atblTransactions b on a.ebayOrderID=b.eBayOrderID and a.ItemID = b.ItemID
  1. select count(*) from atblUsereBayAuthToken

  

19:删除表中的所有数据

  1. DELETE FROM 表名

20:查询SQLserver的详细版本信息

  1. select @@VERSION

  

21:递归查找   根据父节点查找子节点数据/子节点查找父节点数据

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

a)-递归查找数据 这是从父节点到子节点的递归(需要限制大小)

  1. with cte as(
  2.   select CategoryID,CategoryName,CategoryParentID ,CategoryLevel
  3.   from atbleBayCategories
  4.   where CategoryID ='6000'
  5.   union all
  6.   select a.CategoryID,a.CategoryName,a.CategoryParentID,a.CategoryLevel from atbleBayCategories a
  7.   inner join cte b on a.CategoryParentID = b.CategoryID
  8. )
  9. select top 100 * from cte

b)--子节点到父节点(逆向递归)

  1. with temp as(
  2. select *
  3. from atbleBayCategories
  4. where CategoryID ='33636'
  5. union all
  6. select a.* from atbleBayCategories a
  7. inner join temp b on a.CategoryID = b.CategoryParentID where a.CategoryID != b.CategoryID
  8. )
  9. select * from temp

  

特别注意

由于大家表结构可能一致,数据也看似一致可能会导致sql运行错误(就因为之前没有加上这句:a.CategoryID != b.CategoryID,导致sql死循环,执行不成功,楼主当时都准备改表结构了..)

22:设置表中A字段数据=B字段数据:

情景:当用户修改商品信息,需要将修改的数据显示在最前方,假设数据库没有DateModify这个字段,你需要添加这个字段,并且设置这些DateModify数据:

  1. Update tableName set DateModify = DateCreate

23:复制表A数据到表B中

1.INSERT INTO SELECT语句

语句形式为:

  1. Insert into Table2(field1,field2,...) select value1,value2,... from Table1

2.SELECT INTO FROM语句

语句形式为:

  1. SELECT vale1, value2 into Table2 from Table1

要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中

 24:查询数据库中的存储过程是否存在某文本内容

  1. SELECT ROUTINE_NAME, ROUTINE_DEFINITION
  2. FROM INFORMATION_SCHEMA.ROUTINES
  3. WHERE ROUTINE_DEFINITION LIKE '%text%'
  4. AND ROUTINE_TYPE='PROCEDURE'
  1. 查找存储过程包含某文字
  1. select name
  2. from sysobjects o, syscomments s
  3. where o.id = s.id
  4. and text like '%sp_WidgetCrossTabTables%'
  5. and o.xtype = 'P'

 25:替换表中某列字段

  1. update 表名 set 字段名=replace(字段名,'aaaa','cccc');

eg:

  aaaaxxxbbb 变成 ccccxxxbbb
  aaaamtbbb 变成 ccccmtbbb

26:获取具体月份的数据

  1. SELECT CreateDate as time, * FROM [EKU_PrimaryData]
  2. where DATEPART(YEAR,CreateDate) = 2017 and MONTH(CreateDate) in( 10,11)
  3. order by CreateDate
  1. --最近一个月
  2. SELECT DATEADD(month, -1, getdate())
  3.  
  4. --上个月
  5. select convert(varchar(7),dateadd(month,-1,getdate()),120)

27:partition by 分组

  1. select eBayItemID,Cost,FreeShipping from (
  2.  
  3. --根据ebayitemid分组,价格从高到低排序 并标上序号 最后取第一行
  4. select row_number() over( partition by eBayItemID order by cost desc) as rn,*
  5. from [440294_Iguide].[dbo].[atbleBayItemUSShippingServices] --where ebayitemID =105490
  6. --where len(FileName)>0
  7.  
  8. )
  9. as t
  10. where t.rn=1

28:总数据:db1,  不在db2 ,在db3, 获取数据

  1. with db1 as(
  2.  
  3. select t1.Id, t1.ReferenceNumber, t2.ID as InventoryId, t1.UserName
  4.  
  5. from post_GoAntiques t1
  6.  
  7. left join EuroLuxProductBE.dbo.pdt_Inventory t2 on t1.ReferenceNumber=t2.ITEM
  8.  
  9. ),
  10. db2 as (--not in
  11.  
  12. select ProductNumber from post_ProductCommon where WebSiteName='GoAntiques'
  13.  
  14. ),
  15. db3 as( -- in
  16.  
  17. select min(Id) as Id from post_GoAntiques group by ReferenceNumber
  18.  
  19. )
  20.  
  21. select * from db1 where db1.ReferenceNumber in (
  22.  
  23. select ReferenceNumber from db1
  24.  
  25. EXCEPT --去除db2的数据
  26.  
  27. SELECT ProductNumber as ReferenceNumber from db2
  28. )
  29.  
  30. and db1.ID in (
  31.  
  32. select id from db1
  33.  
  34. INTERSECT-- db3的交集
  35.  
  36. SELECT id from db3
  37.  
  38. )

29:sqlserver库占用大小

  1. 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]
  2. FROM sys.master_files

30:一个积分等级表,一个用户积分表。获取用户属于哪个等级: left outer join

  1. select * from [TianYaDemo].[dbo].[Vip_ScoreLogs]
  2. left outer join [TianYaDemo].[dbo].[Vip_ScoreGrade] as sg on TotalValue between MinValue and MaxValue

31:行列转换

  1. create table tb
  2. (
  3. Name varchar(10) ,
  4. Subject varchar(10) ,
  5. Result int
  6. );
  7. insert into tb(Name , Subject , Result) values('张三' , '语文' , 74)
  8. insert into tb(Name , Subject , Result) values('张三' , '数学' , 83)
  9. insert into tb(Name , Subject , Result) values('张三' , '物理' , 93)
  10. insert into tb(Name , Subject , Result) values('李四' , '语文' , 74)
  11. insert into tb(Name , Subject , Result) values('李四' , '数学' , 84)
  12. insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)
  13.  
  14. select * from tb
  15.  
  16. select name 姓名,
  17. max(case subject when'语文'then result else 0 end) 语文,
  18. max(case subject when'数学'then result else 0 end) 数学,
  19. max(case subject when'物理'then result else 0 end) 物理
  20. from tb
  21. --where 数学='83'
  22. group by name

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

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

33:统计库中每个表的行数

  1. SELECT a.name, b.rows
  2. FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id
  3. WHERE (a.type = 'u') AND (b.indid IN (0, 1))
  4. ORDER BY b.rows DESC

34:插入10w条数据

  1. INSERT INTO Department(name,[Company],groupname) VALUES('销售部','中国你好有限公司XX分公司','销售组')
  2. GO 100000

 35:输出sql执行的时间

  1. set statistics time on
  2.  
  3. select * from dbo.EKU_PrimaryDataFiles
  4.  
  5. set statistics time off

36:sql server 规则使用

创建规则->将规则绑定到表上-->测试规则(插入不满足的条件测试)-->取消绑定规则

  1. --创建规则:价格要在0-1000以内
  2. go
  3. create rule rule_Price
  4. as
  5. @price >0 and @price<1000
  6.  
  7. --查询表
  8. select * from books
  9.  
  10. --将规则绑定到表上
  11. exec sp_bindrule 'rule_Price','books.book_price'
  12.  
  13. --这里insert的数据不满足规则,会报错
  14. insert into books values('三国演义',1001,'罗贯中')
  15.  
  16. --取消绑定
  17. exec sp_unbindrule 'books.book_price'
  18.  
  19. --再去执行即可insert成功
  20. insert into books values('三国演义',1001,'罗贯中')
  21.  
  22. --删除规则
  23. drop rule rule_price

37:默认值设置

设置默认值 -->将默认值绑定到某表某列  --->测试---> 取消默认值绑定 --->删除默认值

  1. --查询表
  2. select * from books
  3.  
  4. --设置默认值
  5. create default defaultBookAuth as '作者不详'
  6.  
  7. --将默认值绑定到表列
  8. exec sp_bindefault 'defaultBookAuth' ,'books.book_auth'
  9.  
  10. insert into books(book_name) values('不存在的人2019')
  11.  
  12. --查询表
  13. select * from books
  14.  
  15. --取消绑定
  16. exec sp_unbindefault 'books.book_auth'
  17.  
  18. --删除默认值
  19. drop default defaultBookAuth

38:存储过程

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

  •  创建无参存储过程
  1. --、不带参数的存储过程,获取MyStudentInfo表的所有记录
  2. CREATE proc Proc_GetInfo
  3. as
  4. select * from MyStudentInfo20190311
  5. go
  6.  
  7. --执行存储过程
  8. exec Proc_GetInfo
  9. go
  • 创建带输入参数的存储过程
  1. CREATE proc Proc_InsertData
  2. @Id int,
  3. @Name varchar(16),
  4. @Age int,
  5. @Gender varchar(2),
  6. @Phone varchar(16),
  7. @Address varchar(50),
  8. @GradeId int,
  9. @Score int
  10. as
  11. begin
  12. insert INTO MyStudentInfo20190311 VALUES(@Id,@Name,@Age,@Gender,@Phone,@Address,@Gender,@Score)
  13. end
  • 创建带默认值的输入参数的存储过程  
  1. CREATE proc Proc_InsertDefault
  2. @Id int,
  3. @Name varchar(16),
  4. @Age int,
  5. @Gender varchar(2)='',
  6. @Phone varchar(16),
  7. @Address varchar(50)='沈阳',
  8. @GradeId int,
  9. @Score int
  10. as
  11. begin
  12. insert INTO MyStudentInfo20190311 VALUES(@Id,@Name,@Age,@Gender,@Phone,@Address,@Gender,@Score)
  13. end
  • 创建带输出参数的存储过程(根据输入的ID返回名字)

    1. create proc Proc_Out
    2. @Id int,
    3. @Name varchar(200) out
    4. as
    5. begin
    6. select @Name=Name from MyStudentInfo20190311 where id=@id
    7. end
    1. --sql执行存储过程
    2.  
    3. declare @Name nvarchar(200)
    4. exec Proc_Out 1 , @Name out
    5. select @Name as 输出的值

  • 存储过程返回多个结果

    1. create proc Proc_Page
    2. @StartIndex int,
    3. @EndIndex int
    4. as
    5. begin
    6. select COUNT(*) as 总数 from MyStudentInfo20190311
    7. select * from (
    8. SELECT ROW_NUMBER() OVER(ORDER BY Id) AS rowid,* FROM MyStudentInfo20190311 ) temp
    9. where temp.rowid between @StartIndex AND @EndIndex
    10. end
    11.  
    12. --sql调用存储过程
    13. exec Proc_Page 1,2

39:函数

 
 

sql 小全的更多相关文章

  1. SQL Server全时区转换

    SQL Server全时区转换 假如你的应用程序是跨国(例如跨国银行交易)使用的话,那么数据库的一些国际化特性支持可以说是非常重要 其中最常见的就是各国时区上的差异,由于SQL Server getd ...

  2. SQL转换全角/半角函数

    /****** SQL转换全角/半角函数 开始******/ CREATE FUNCTION ConvertWordAngle ( ), --要转换的字符串 @flag bit --转换标志,0转换成 ...

  3. SQL小汇总

    SQL小汇总 1.对每个时段的数据进行统计2.查询时间条件(to_date)3.插入序列号和系统时间4.查询当天.7天内.30天内5.查询前后x小时.分钟.天.月.6.保留小数点后4位7.查询字段A中 ...

  4. ICANN认证注册商小全 英、德、法

    转载 在ICANN认证注册商小全(一)和ICANN认证注册商小全(二)中,QQPCC介绍了美洲的各ICANN认证注册商.今天我们移师欧洲,介绍欧洲的ICANN认证注册商,欧洲的注册商也很多,不可能在一 ...

  5. SQL转换全角和半角函数

    SQL转换全角和半角函数 CREATE FUNCTION f_Convert( ), --要转换的字符串 @flag bit --转换标志,0转换成半角,1转换成全角 )) AS BEGIN ),@s ...

  6. windows蓝屏错误小全

    作者:siyizhu 日期:2005-11-27 字体大小: 小 中 大  引用内容 0 0x00000000 作业完成.  1 0x00000001 不正确的函数.  2 0x00000002 系统 ...

  7. sql server 全角与半角字符转换

      /****** SQL转换全角/半角函数 开始******/CREATE FUNCTION ConvertWordAngle ( @str NVARCHAR(4000), --要转换的字符串 @f ...

  8. linux常用命令与实例小全

    转至:https://www.cnblogs.com/xieguohui/p/8296864.html  linux常用命令与实例小全 阅读目录(Content) 引言 一.安装和登录 (一)    ...

  9. java面试题小全

    面向对象的特征有哪些方面   1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题,而6. 只是选择其中的 ...

随机推荐

  1. java之操作集合的工具类--Collections

    Collections是一个操作Set.List和Map等集合的工具类. Collections中提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了对集合对象设置不可变.对集合对象实现同步控 ...

  2. go面向对象之多态即接口(interface)

    Go 语言接口 Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口. 实例 /* 定义接口 */ type interface ...

  3. form表单中的button自动刷新页面问题

    form表单中如果存在button的话,有可能会出现一个问题:点击button,触发了页面的自动刷新事件. 原因是因为<button>标签默认的类型是submit,即默认的button点击 ...

  4. 清新简约风格毕业论文答辩PPT模板推荐

    不管是学生还是老师,应该经常会需要学生答辩的PPT模板,今天给大家推荐织梦58的学生答辩ppt模板. 模版来源:http://ppt.dede58.com/gongzuohuibao/26494.ht ...

  5. Script - 检查当前的undo配置和建议设置 (Doc ID 1579035.1)

    Script - Check Current Undo Configuration and Advise Recommended Setup (Doc ID 1579035.1) APPLIES TO ...

  6. July 7th, 2019. Week 27th, Sunday

    We laughed and kept syaing "see you soon", but inside we both knew we would never see each ...

  7. Linux设置免密登陆

    生成秘钥 ssh-keygen -t rsa -C "XX@qq.com",然后一路回车就行 生成之后会在用户的根目录生成一个 ".ssh"的文件夹 进入&qu ...

  8. 【CentOS7】CentOS7各个版本镜像下载地址(转)

    链接:https://www.cnblogs.com/caidingyu/p/10679422.html # CentOS7.6 下载地址       # CentOS-7-x86_64-DVD-18 ...

  9. AcWing 45. 之字形打印二叉树

    地址 https://www.acwing.com/problem/content/description/43/ 题目描述请实现一个函数按照之字形顺序从上向下打印二叉树. 即第一行按照从左到右的顺序 ...

  10. Spring Batch基本概念

    Spring batch主要有以下部分组成: JobRepository     用来注册job的容器 JobLauncher             用来启动Job的接口 Job           ...