第三章 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,他也认为是真.只要有值就为真

 

 

 

posted @ 2010-08-10 15:20  转航  阅读(274)  评论(0编辑  收藏  举报