SQL2008--SQL语句-存储过程-触发器-事务处理-基本语法-函数

环境 SQL2008

1.存储过程建立

库-可编程性-存储过程-右击“存储过程”-点击“新建存储过程”

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[zgccgc] //存储过程的名字 
@zgID nvarchar(10),    //定义参数区
@zgname nvarchar(10),
@zgage  int,
@zgaddress nvarchar(200)

AS
BEGIN 
   insert into zg(ID,name,age,address) values(@zgID,@zgname,@zgage,@zgaddress) 
END
GO

使用方法:
zgccgc 5,‘第五名‘,25,‘日本‘

2.触发器建立

库-表-点击“+”号-右击“触发器”-点击“触发器”

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[zg2cfq]
   ON  [dbo].[zg_2]
   AFTER update
AS
BEGIN
  update zg_2 set isnull=1 where zg_2.ID=(select ID from inserted)
END
GO

使用方法:
update zg_2 set yingyu=99 where ID=2

1.SQL2008中,字段为字符,但内容为主‘2011-12-05 10:52:00’ ,怎么查记录?

select * from N201105B where Cast(BTm as datetime) > Cast(‘2011-05-30 10:28‘ As DateTime)

where CONVERT(varchar(100),fcsj,20)>‘2011-08-05 14:22:00.000‘

2.在ACCESS中,字段为日期时间型,那怎么查呢?

Select * from ProductionDataTable where datetime>cdate(‘2011-04-26 04:53:38‘)

Select * from ProductionDataTable where datetime>‘2011-04-26 04:53:38‘

3.查出XX字段前5位=‘2011-’的记录

select * from RecipeDetail where (SUBSTRING(Recipe_Code, 1, 5) = ‘2011-‘)

4.留下不从复的记录

delete y_jcyy_basefingerprint where id not in (select max(ID) from y_jcyy_basefingerprint group by personid)  ­

5.事务处理

Begin Tran
insert into RecipeMain(Code,Name,IfValid,Grade,Degree,SendType) values(‘2011-09022‘,‘COC‘,‘1‘,‘COC‘,‘100-250‘,‘自动车‘);
If @@error <>0 begin ROLLBACK TRANSACTION goto quit end ;
insert into RecipeDetail(ID,Recipe_Code,Material_Code,Standard_Dosage,ErrorMinus,ErrorPlus,Remark) values(‘111‘,‘2011-09022‘,‘1‘,‘500‘,‘0.23‘,‘22‘,‘0‘);
If @@error <>0 begin ROLLBACK TRANSACTION goto quit end ;
COMMIT TRANSACTION quit:

3.基本语法(合并结果集)

select stockname from table1 ­

union [all] ----- union合并查询结果集,all-保留重复行 ­

select stockname from table2 ­

---------------------------------------------------------------

新建表:
create table [表名]
(
[自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,
[字段1] nVarChar(50) default \‘默认值\‘ null ,
[字段2] ntext null ,
[字段3] datetime,
[字段4] money null ,
[字段5] int default 0,
[字段6] Decimal (12,4) default 0,
[字段7] image null ,
)

删除表:
Drop table [表名]

插入数据:
INSERT INTO [表名] (字段1,字段2) VALUES (100,\‘51WINDOWS.NET\‘)

删除数据:
DELETE FROM [表名] WHERE [字段名]>100

更新数据:
UPDATE [表名] SET [字段1] = 200,[字段2] = \‘51WINDOWS.NET\‘ WHERE [字段三] = \‘HAIWA\‘

新增字段:
ALTER TABLE [表名] ADD [字段名] NVARCHAR (50) NULL

删除字段:
ALTER TABLE [表名] DROP COLUMN [字段名]

修改字段:
ALTER TABLE [表名] ALTER COLUMN [字段名] NVARCHAR (50) NULL

重命名表:(Access 重命名表,请参考文章:在Access数据库中重命名表)
sp_rename \‘表名\‘, \‘新表名\‘, \‘OBJECT\‘

新建约束:
ALTER TABLE [表名] ADD CONSTRAINT 约束名 CHECK ([约束字段] <= \‘2000-1-1\‘)

删除约束:
ALTER TABLE [表名] DROP CONSTRAINT 约束名

新建默认值
ALTER TABLE [表名] ADD CONSTRAINT 默认值名 DEFAULT \‘51WINDOWS.NET\‘ FOR [字段名]

删除默认值
ALTER TABLE [表名] DROP CONSTRAINT 默认值名

删除Sql Server 中的日志,减小数据库文件大小
dump transaction 数据库名 with no_log
backup log 数据库名 with no_log
dbcc shrinkdatabase(数据库名)
exec sp_dboption \‘数据库名\‘, \‘autoshrink\‘, \‘true\‘

\\\‘添加字段通用函数
Sub AddColumn(TableName,ColumnName,ColumnType)
Conn.Execute(\"Alter Table \"&TableName&\" Add \"&ColumnName&\" \"&ColumnType&\"\")
End Sub

\\\‘更改字段通用函数
Sub ModColumn(TableName,ColumnName,ColumnType)
Conn.Execute(\"Alter Table \"&TableName&\" Alter Column \"&ColumnName&\" \"&ColumnType&\"\")
End Sub

\\\‘检查表是否存在

sql=\"select count(*) as dida from sysobjects where id = object_id(N\‘[所有者].[表名]\‘) and OBJECTPROPERTY(id, N\‘IsUserTable\‘) = 1\"

set rs=conn.execute(sql)

response.write rs(\"dida\")\‘返回一个数值,0代表没有,1代表存在

判断表的存在:
select * from sysobjects where id = object_id(N\‘[dbo].[tablename]\‘) and OBJECTPROPERTY(id, N\‘IsUserTable\‘) = 1

某个表的结构
select * from syscolumns where id = object_id(N\‘[dbo].[你的表名]\‘) and OBJECTPROPERTY(id, N\‘IsUserTable\‘) = 1

----------------------------------------------------------------

­

--IF ELSE ­

declare @x int @y int @z int ­

select @x = 1 @y = 2 @z=3 ­

if @x > @y ­

print ‘x > y‘ --打印字符串‘x > y‘ ­

else if @y > @z ­

print ‘y > z‘ ­

else print ‘z > y‘ ­

­

--CASE ­

use pangu ­

update employee ­

set e_wage = ­

case ­

when job_level = ’1’ then e_wage*1.08 ­

when job_level = ’2’ then e_wage*1.07 ­

when job_level = ’3’ then e_wage*1.06 ­

else e_wage*1.05 ­

end ­

­

--WHILE CONTINUE BREAK ­

declare @x int @y int @c int ­

select @x = 1 @y=1 ­

while @x < 3 ­

begin ­

print @x --打印变量x 的值 ­

while @y < 3 ­

begin ­

select @c = 100*@x + @y ­

print @c --打印变量c 的值 ­

select @y = @y + 1 ­

end ­

select @x = @x + 1 ­

select @y = 1 ­

end ­

­

--WAITFOR ­

--例 等待1 小时2 分零3 秒后才执行SELECT 语句 ­

waitfor delay ’01:02:03’ ­

select * from employee ­

--例 等到晚上11 点零8 分后才执行SELECT 语句 ­

waitfor time ’23:08:00’ ­

select * from employee ­

­

­

***SELECT*** ­

­

select *(列名) from table_name(表名) where column_name operator value ­

ex:(宿主) ­

select * from stock_information where stockid = str(nid) ­

stockname = ‘str_name‘ ­

stockname like ‘% find this %‘ ­

stockname like ‘[a-zA-Z]%‘ --------- ([]指定值的范围) ­

stockname like ‘[^F-M]%‘ --------- (^排除指定范围) ­

--------- 只能在使用like关键字的where子句中使用通配符) ­

or stockpath = ‘stock_path‘ ­

or stocknumber < 1000 ­

and stockindex = 24 ­

not stocksex = ‘man‘ ­

stocknumber between 20 and 100 ­

stocknumber in(10,20,30) ­

order by stockid desc(asc) --------- 排序,desc-降序,asc-升序 ­

order by 1,2 --------- by列号 ­

stockname = (select stockname from stock_information where stockid = 4) ­

--------- 子查询 ­

--------- 除非能确保内层select只返回一个行的值, ­

--------- 否则应在外层where子句中用一个in限定符 ­

select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复 ­

select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name ­

select stockname , "stocknumber" = count(*) from table_name group by stockname ­

--------- group by 将表按行分组,指定列中有相同的值 ­

having count(*) = 2 --------- having选定指定的组 ­

­

select * ­

from table1, table2 ­

where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示 ­

table1.id =* table2.id -------- 右外部连接 ­

­

­

***insert*** ­

­

insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx") ­

value (select Stockname , Stocknumber from Stock_table2)---value为select语句 ­

­

***update*** ­

­

update table_name set Stockname = "xxx" [where Stockid = 3] ­

Stockname = default ­

Stockname = null ­

Stocknumber = Stockname + 4 ­

­

***delete*** ­

­

delete from table_name where Stockid = 3 ­

delete from b1 where ID in(select ID from b2)

delete   a   from   table1   a,table2   b   where   a.id=b.id   and   a.col=b.col

truncate table_name ----------- 删除表中所有行,仍保持表的完整性 ­

drop table table_name --------------- 完全删除表 ­

­

***alter table*** --- 修改数据库表结构 ­

­

alter table database.owner.table_name add column_name char(2) null ..... ­

sp_help table_name ---- 显示表已有特征 ­

create table table_name (name char(20), age smallint, lname varchar(30)) ­

insert into table_name select ......... ----- 实现删除列的方法(创建新表) ­

alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束 ­

­

***function(/*常用函数*/)*** ­

­

----统计函数---- ­

AVG --求平均值 ­

COUNT --统计数目 ­

MAX --求最大值 ­

MIN --求最小值 ­

SUM --求和 ­

­

--AVG ­

use pangu ­

select avg(e_wage) as dept_avgWage ­

from employee ­

group by dept_id ­

­

--MAX ­

--求工资最高的员工姓名 ­

use pangu ­

select e_name ­

from employee ­

where e_wage = ­

(select max(e_wage) ­

from employee) ­

­

--STDEV() ­

--STDEV()函数返回表达式中所有数据的标准差 ­

­

--STDEVP() ­

--STDEVP()函数返回总体标准差 ­

­

--VAR() ­

--VAR()函数返回表达式中所有值的统计变异数 ­

­

--VARP() ­

--VARP()函数返回总体变异数 ­

­

----算术函数---- ­

­

/***三角函数***/ ­

SIN(float_expression) --返回以弧度表示的角的正弦 ­

COS(float_expression) --返回以弧度表示的角的余弦 ­

TAN(float_expression) --返回以弧度表示的角的正切 ­

COT(float_expression) --返回以弧度表示的角的余切 ­

/***反三角函数***/ ­

ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角 ­

ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角 ­

ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角 ­

ATAN2(float_expression1,float_expression2) ­

--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角 ­

DEGREES(numeric_expression) ­

--把弧度转换为角度返回与表达式相同的数据类型可为 ­

--INTEGER/MONEY/REAL/FLOAT 类型 ­

RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为 ­

--INTEGER/MONEY/REAL/FLOAT 类型 ­

EXP(float_expression) --返回表达式的指数值 ­

LOG(float_expression) --返回表达式的自然对数值 ­

LOG10(float_expression)--返回表达式的以10 为底的对数值 ­

SQRT(float_expression) --返回表达式的平方根 ­

/***取近似值函数***/ ­

CEILING(numeric_expression) --返回>=表达式的最小整数返回的数据类型与表达式相同可为 ­

--INTEGER/MONEY/REAL/FLOAT 类型 ­

FLOOR(numeric_expression) --返回<=表达式的最小整数返回的数据类型与表达式相同可为 ­

--INTEGER/MONEY/REAL/FLOAT 类型 ­

ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五入值返回的数据 ­

--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型 ­

ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为 ­

--INTEGER/MONEY/REAL/FLOAT 类型 ­

SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型 ­

--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型 ­

PI() --返回值为π 即3.1415926535897936 ­

RAND([integer_expression]) --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数 ­

­

­

----字符串函数---- ­

ASCII() --函数返回字符表达式最左端字符的ASCII 码值 ­

CHAR() --函数用于将ASCII 码转换为字符 ­

--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值 ­

LOWER() --函数把字符串全部转换为小写 ­

UPPER() --函数把字符串全部转换为大写 ­

STR() --函数把数值型数据转换为字符型数据 ­

LTRIM() --函数把字符串头部的空格去掉 ­

RTRIM() --函数把字符串尾部的空格去掉 ­

LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串 ­

CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串出现的开始位置 ­

SOUNDEX() --函数返回一个四位字符码 ­

--SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值 ­

DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异 ­

--0 两个SOUNDEX 函数返回值的第一个字符不同 ­

--1 两个SOUNDEX 函数返回值的第一个字符相同 ­

--2 两个SOUNDEX 函数返回值的第一二个字符相同 ­

--3 两个SOUNDEX 函数返回值的第一二三个字符相同 ­

--4 两个SOUNDEX 函数返回值完全相同 ­­­

­

----日期函数---- ­

DAY() --函数返回date_expression 中的日期值 ­

MONTH() --函数返回date_expression 中的月份值 ­

YEAR() --函数返回date_expression 中的年份值 ­

DATEADD(<datepart> ,<number> ,<date>) ­

--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期 ­

DATEDIFF(<datepart> ,<number> ,<date>) ­

--函数返回两个指定日期在datepart 方面的不同之处 ­

DATENAME(<datepart> , <date>) --函数以字符串的形式返回日期的指定部分 ­

DATEPART(<datepart> , <date>) --函数以整数值的形式返回日期的指定部分 ­

GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间

时间: 2024-10-10 10:02:11

SQL2008--SQL语句-存储过程-触发器-事务处理-基本语法-函数的相关文章

SQL Server之 (二) SQL语句 模糊查询 空值处理 聚合函数

(二) SQL语句  模糊查询  空值处理  聚合函数 自己学习笔记,转载请注明出处,谢谢!---酸菜 SQL :结构化查询语言(Structured Query Language),关系数据库管理系统的标准语言. Sybase与Mircosoft对标准SQL做了扩展:T-SQL (Transact-SQL); 注:①SQL对大小写的敏感取决于排序规则,一般不敏感; ②SQL对单引号的转义,用两个单引号来表示一个单引号; ③SQL执行顺序: 1→2→3→4 select  * ---------

hiberante对象方式的投影操作与sql语句的投影方式(聚集函数的hibernate用法)

hiberante对象方式的投影操作与sql语句的投影方式(聚集函数的hibernate用法) 最近用到了hibernate的投影,写日记出来记录一下. (⊙o⊙)… 前提:搭配好hibernate环境了. myclass指的是已经映射好的实体类 如下3个函数是我写来测试投影的方法:   此三个方法我写在basedao中(基础dao类,做常用dao操作) 1 /** 2 * 斌临城下增加! 3 * <p/> 4 * ---(⊙o⊙)… 5 * <p/> 6 * * 7 */ 8 p

SQL之存储过程详细介绍及语法(转)

1:定义 存储过程(stored procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行. 存储过程分为系统存储过程和自定义存储过程. *系统存储过程在master数据库中,但是在其他的数据库中可以直接调用,并且在调用时不必在存储过程前加上数据库名,因为在创建一个新数据库时,系统存储过程 在新的数据库中会自动创建 *自定义存储过程,由用户创建并能完成某一特定功能的存储过程,存储过程既可以有参数又有返回值,但是它与函数不同

SQL之存储过程详细介绍及语法(篇幅比较长慢慢看)

1:定义 存储过程(stored procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行. 存储过程分为系统存储过程和自定义存储过程. *系统存储过程在master数据库中,但是在其他的数据库中可以直接调用,并且在调用时不必在存储过程前加上数据库名,因为在创建一个新数据库时,系统存储过程 在新的数据库中会自动创建 *自定义存储过程,由用户创建并能完成某一特定功能的存储过程,存储过程既可以有参数又有返回值,但是它与函数不同

SQL语句多表连接查询语法

一.外连接 1.左连接  left join 或 left outer join SQL语句:select * from student left join score on student.Num=score.Stu_id; 2.右连接  right join 或 right outer join SQL语句:select * from student right join score on student.Num=score.Stu_id; 3.完全外连接  full join 或 full

SQL 视图 局部变量 全局变量 条件语句 事务 触发器

一.视图 1.视图是一张虚拟表,他所存储的不是实际数据,而是查询语句,但我们可以对视图进行像数据表一样的操作. 2.为什么使用视图呢?我的理解是:1.在远程传输数据时,可以避免过长的查询字符,减少流量.2.他可以简化繁杂的多表嵌套查询语句.3.安全性,防止非法用户访问敏感数据,因为我们可以通过创建视图展示给用户,我们想要给他们查看的数据. 3.视图的创建 create view vw_city as select cityName from city --这个查询语句可以随便的写,如果是些多层次

SQL Server查询优化与事务处理

博文目录一.索引二.视图三.存储过程四.系统存储过程五.触发器六.事务七.锁 一.索引 索引提供指针以指向存储在表中指定列的数据值,然后根据指定的次序排列这些指针,再跟随指针到达包含该值的列. 1.什么是索引 数据库中的索引与书籍中的目录相似.在一本书中,无需阅读整本书,利用目录就可以快速的查找到所需的信息.在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需的数据.书中的目录就是一个词语列表,其中注明了包含各个词的页码.而数据库中的索引是某个表中一列或若干列值的集合,以及物理

SQL语句之 知识补充

SQL语句之 知识补充 一.存储过程 运用SQL语句,写出一个像函数的模块,这就是存储过程. 需求: 编写存储过程,查询所有员工 -- 创建存储过程(必须要指定结束符号) -- 定义结束符号 DELIMITER $ CREATE PROCEDURE pro_test() BEGIN SELECT * FROM student; END $ CALL pro_test     -- 调用存储过程 创建存储语句: delimiter 结束符号 create procedure 存储过程名称( 参数列

5-04用Sql语句创建表

用Sql语句创建表的基本语法: USE E_Market--指向当前所操作的数据库 GO CREATE TABLE CommoditySort--创建表的名字 { sortID int IDENTITY(1,1) NOT NULL,类别编号 sordName varchar(50) NOT NULL --类别名称 } GO