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 的缺省格式返回系统当前的日期和时间 

posted on 2015-07-12 10:18  疯狂delphi  阅读(369)  评论(0编辑  收藏  举报

导航