MSSQL 关键字与使用方法

用select @@identity得到上一次插入记录时自动产生的ID

IDENT_CURRENT('table_name')  IDENT_CURRENT 返回任何会话和任何作用域中为特定表生成的标识值

SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。

declare @t table(int int)  --这里定义一个表 类型
INSERT dbo.Table (Name)
    OUTPUT INSERTED.Id  -这里使用output  into 那个表,记住只能是表
    VALUES ('MyName');
select * from @t
/**
delete  tb where id=1
output deleted.id into @t -
where id=1  --把where语句放在下面
select * from @t
**/

encrypt  

存储过程(sp_EncryptObject)加密的方法是在存储过程,函数,视图的“As”位置前加上“with encryption”;如果是触发器,就在“for”位置前加“with encryption”。

Top 表示只显示Select出来的头几个如Top 5      selecttop 20id,name,naddressFrompreson

Between

DISTINCT            在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。

SELECT DISTINCT Company FROM Orders

AS

select preson.name AS 名字,preson_1.naddress AS 地址,count(*)From preson join preson_1 on preson.name=preson_1.Name where preson.name='BC'

JOIN  用于根据两个或多个表中的列之间的关系,从这些表中查询数据

select 【preson.name】,【preson_1.naddress】,count(*)From preson join preson_1onpreson.name=preson_1.Name where preson.name='BC'

引用两个表我们可以通过引用两个表的方式,从两个表中获取数据:

SELECT Persons.LastName,Persons.FirstName,Orders.OrderNo FROM Persons,Orders WHERE Persons.Id_P =Orders.Id_P

UNION操作符

select name,naddress From preson    orderby name             (Group by *)

UNION ALL

select name,naddress From preson_1 orderby name            (Group by *)

ALTER ALTER TABLE 语句用于在已有的表中添加、修改或删除列。

如需在表中添加列,请使用下列语法:

ALTER TABLE table_name ADD column_name datatype

ALTER TABLE table_name DROPCOLUMN column_name

NULL

SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NOT NULL

ISNULL()       ISNULL(UnitsOnOrder,0)

如果 "UnitsOnOrder" 是 NULL,则不利于计算,因此如果值是 NULL 则 ISNULL() 返回0。

Over       row_number()over(orderbyId)

select *from(select Id,Name,row_number()over(order by Id)As rownumber from Mypresonwhere t.rownumber>=10 and t.rownumber <= 20

CASE WHEN Then End

CASEWHEN sex=1THEN1 ELSENULL END

CASE WHEN T2.COMPARE_TYPE='A' AND THEN ELSE NULL END

USE { database } 切换数据库用的。

HAVING        count(*)Group by

SELECT Customer,SUM(OrderPrice) FROM Orders ROUP BYCustomer HAVING SUM(OrderPrice)<2000

GROUPBY

SELECT Name,SUM(ID)FROMpresonGROUPBYName

select ID,Name,NAddress,SUM(IdFrom preson group By Id,Name,NAddress order by Name

ORDER BY     ASC DESC

SELECT Company, OrderNumber FROM Orders ORDER BY Company

SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber

DELETE 语句用于删除表中的行。

DELETE FROM Person WHERE LastName = 'Wilson'

DELETE FROM table_name    删除所有行

Update

Update Person Set Name=’Name’ WHERE LastName = 'Wilson'

INSERT INTO

INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen10', 'Beijing')

INSERT INTO Persons (LastName, Address) VALUES ('Wilson','Champs-Elysees')

output inserted

insert into preson([User],Pwd) output inserted.Id values('name',N'pwd ')

insert into person output inserted.name values('dsfsf','lskdjflsdk')

WHERE IN操作符

in('BC','ZC')在二者之间 LIKE['BC','ZC'] 当然Link只匹配单一字符

select top 20 id,name,naddress From preson where name in('BC','ZC')order by name in(Ting[])可以是子查询返回的组

select top 20 id,name,naddress From preson where id>=0and name in('BC','ZC')order by name

LIKE        通配符匹配      NotLink'N%'

% 替代一个或多个字符         _ 仅替代一个字符

[charlist]                字符列中的任何单一字符 [1-9][1,2,3,4]

[^charlist]或者[!charlist] 不在字符列中的任何单一字符

Id为N开头    select top 20 id,name,naddress FROM preson WHERE Id LIKE 'N%'

SELECT FROM Persons WHERE City LIKE 'N%'

select top 20 id,name,naddress From preson where id>=and name like 'B%' order by name

BETWEEN      在某个范围内

LIKE 搜索某种模式

AND 和 OR 运算符 NOT

SELECT

select top 20 name AS 名字,naddress AS 地址 From preson where id>=and name between 'BC' and 'ZC' order by name

 

CREATE DATABASE NAME ON PRIMARY(NAME=,FILENAME='*.mdf',SIZE,MAXSIZE,FILEGROWTH=1024KB,10MB,%10)

LOG ON(NAME=,FILENAME='*.mdf',SIZE,MAXSIZE,FILEGROWTH=1024KB,10MB,%10)

CREATE TABLE Persons (Id_P int NOT NULL,LastName varchar(255) NOTNULL,PRIMARY KEY (Id_P))

CREATE TABLE Persons (Id_P int NOT NULL PRIMARY KEY,LastNamevarchar(255) NOT NULL)

快照

CREATE DATABASE Damo_snapshot ON(NAME=Damo,FILENAME='d:\snapshot\demo.mdf)AS SANPSHOT OF demo; //快照

SQL CHECK 约束

Name like ('[0-9][0-9]')         Name in ('a','8')             Name >0 and Name <9

Date 函数

select CONVERT(VARCHAR(10),GETDATE(),110) /select DATEPART(yyyy,GETDATE())

下面的表格列出了 SQL Server 中最重要的内建日期函数:

函数 描述

GETDATE()      返回当前日期和时间

DATEPART()    返回日期/时间的单独部分

DATEPART(yyyy,OrderDate)

DATEADD()     在日期中添加或减去指定的时间间隔

DATEADD(day,2,OrderDate)

DATEDIFF()     返回两个日期之间的时间

DATEDIFF(datepart,startdate,enddate)

CONVERT()     用不同的格式显示日期/时间

select CONVERT(VARCHAR(19),GETDATE())

select CONVERT(VARCHAR(10),GETDATE(),110)

select CONVERT(VARCHAR(11),GETDATE(),106)

select CONVERT(VARCHAR(24),GETDATE(),113)

abs(1.2)=1

ceiling(1.3)=2       (1.5)=2

floor(1.3)=1   (1.6)=1

round(3.14156,2)=3.14 (3.15156,1)=3.2

AVG(column)       返回某列的平均值

COUNT(column)   返回某列的行数(不包括NULL值)

COUNT(*)             回被选行数

MAX(column)       返回某列的最高值

MIN(column)        回某列的最低值

SUM(column)       返回某列的总和

LEN()

lower() upper()

rtrim() ltrim()

substring('JJGGGGOO',2,3)='JGG'

CONVERT(varchar(10),SaleTime)/cast(SaleTime as varchar(10))

 

视图 View相当于Temp生成的表

CREATEVIEW [Current Product List] AS Select * From...

DROPVIEW [Current Product List]

触发器

createtrigger mytrigger on AddTable for update AS ....

altertrigger mytrigger on AddTable for update AS ....

execsp_helptext mytrigger 查看某一个触发器的内容

select* from sysobjects where xtype='TR'  如果我想查询当前数据库中有多少触发器

disabletrigger [触发器名] on database --禁用触发器

enabletrigger [触发器名] on database --开启触发器

那触发器的功能虽大,但是一旦触发,恢复起来就比较麻烦了,那我们就需要对数据进行保护,这里就需要用到rollback数据回滚~

过程

PROCEDURE==proc

createproc [Name] {,OUT,OUTPUT} AS .....

create proc MyProcess @Id INT,@Namenvarchar(50AS.....Go

exec MyProcess 80,@Name OutPut

drop proc MyProcess

游标

declare mycursor cursor SCROLL for select O_ID,A_Salary from AddSalary

open mycursor

fetchnext from mycursor into @O_ID,@A_Salary  while(@@fetch_status= 0)

 NEXT | PRIOR | FIRST | LAST |

 ABSOLUTE { n | @nvar }  |

如果 n 或 @nvar 为正,则返回从游标头开始向后的第 n 行,并将返回行变成新的当前行。如果n 或 @nvar 为负,则返回从游标末尾开始向前的第 n 行,并将返回行变成新当前行。如果n 或 @nvar 为 0,则不返回行。

RELATIVE { n | @nvar }

如果 n 或 @nvar 为正,则返回从当前行开始向后的第 n 行,并将返回行变成新的当前行。如果 n 或 @nvar 为负,则返回从当前行开始向前的第 n 行,并将返回行变成新的当前行。如果n 或 @nvar 为 0,则返回当前行。在对游标进行第一次提取时为-1,设置为负数或 0 的情况下指定FETCH RELATIVE,则不返回行。

 

原因:DECLARE 指定标CURSOR FOR   解决:DECLARE 指定标CURSOR SCROLLFOR

declare Mycursor cursor scroll for select*from persons

open Mycursor

while @@FETCH_STATUS=0

fetch next from Mycursor into @Id,@Name,@pwd

close Mycursor

deallocate Mycursor

判断

if exists(select From persons where Name is NULL)

print 'true'

Go

GO代表一个批处理的结束你可以把每个GO之间的语句当成是一句SQL GO不是标准的语法,只是查询分析器为了区分多个批处理而设的分隔符而已


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值