第三章 t-sql程序设计基础 批处理与用户自定义函数
批处理 指包含一条或多条t-sql语句的语句组,这组语句从应用程序一次性的发送到sql server服务器执行
执行单元 sql server服务器将此批处理语句编译成一个可执行单元,这种单元成为执行单元
若批处理中的某条语句编译出错,则无法执行.若运行出错,则视情况而定
书写批处理时,go语句作为批处理命令的结束标志.当编译读取到go语句时,会把go语句前面所有的语句当做一个批处理,并将这些语句打
包发送给服务器.
go语句本身不是t-sql语句的组成部分,它只是一个用于表示批处理结束的前段指令
建立批处理时,注意 create default create rule create trigger create view等语句在同一个批处理中只能提
交一个.
不能再删除一个对象之后,在同一批处理再次引用这个对象.
不能把规则和默认值绑定到表字段或者自定义字段上之后,立即在同一个批处理中使用他们
不能定义check约束之后,立即在同一个批处理中使用
不能修改表中一个字段名之后,立即在同一个批处理中引用这个新字段
使用set语句设置的某些set选项不能应用于同一个批处理中的查询
若批处理中第一个语句是执行某个存储过程的execute语句,则execute关键字可以省略.若该语句不是第一个语句,则必须写上
用户自定义函数
use pangu
go
create function WorkYearWage(@hiredate datetime,@today datetime,@per_wage money)
returns money
as begin
declare @WorkYearWage money
set @WorkYearWage=(year(@today)-year(@hiredate))* @per_wage
return (@WorkYearWage)
end
go
调用函数
select pangu.dbo.workyearwage('1991-7-1',getdate(),15) as work_year_wage
创建内嵌表值用户自定义函数
use sample
go
create function orderfirms(@productid varchar(30))
return table
as
return (select * from products p where p.p_id = @ productid)
go
注意一点:一定不要把if ... exists和聚合函数一起使用,因为聚合函数总是返回数据,即使数据是0.
例如;if exists(select count(*) from titles where pub_id=’9933’)
对于exists来说,即使是0,他也认为是真.只要有值就为真