Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88851
  • 博文数量: 29
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 281
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-02 18:00
文章分类
文章存档

2014年(29)

我的朋友

分类: C/C++

2014-01-25 11:16:54

原文地址: T-SQL程序设计 作者:zhanglili123321



--T-SQL程序设计
/* T-SQL不是一种通用的程序设计语言,但支持某些基本的设计思想和概念,可以用于数据操作处理。
这些思想和概念一般在使用简单的SQL语句时不用,但在使用存储过程、游标、触发器等时经常出现。
因此,值得简要地试验一下这些功能,特别是以下功能:
使用变量,
执行条件处理,
重复处理(循环)。*/

--使用变量
/* T-SQL变量具有特殊的规则和要求:
1、所有T-SQL变量名必须以@开始,局部变量用@为前缀,而全局变量(由SQL Server自身大量使用,一般你个人不用)用@@为前缀。
2、在T-SQL变量可以使用之前,必须使用DECLARE语句声明它们。
3、在声明一个变量时,必须指定它的数据类型;
4、可用多条DECLARE语句定义多个变量,也可以在单条DECLARE语句中定义多个变量(变量之间用逗号分隔);
5、不存在对变量“解除声明”的方法,这表示变量在被声明后直到处理完成前都会一直存在。*/

--声明变量
DECLARE @age int;
DECLARE @firstname char(20),@lastname char(20);

--给变量赋值
SET @lastname='forta';
SET @firstname='Ben';
SET @age=21;
--也可以SELECT赋值,如下
SELECT @age=21;

/*SET或SELECT?
除非被赋予变量的值是SELECT操作的结果(在这种情况下显然是使用SELECT),否则是用SET来把这些值赋予变量。
在使用SET或SELECT赋予变量值之间有一个重要的差别。SET只设置单个变量,要赋值给多个变量必须使用多条SET语句。
而SELECT可用来在单条语句中给多个变量赋值。*/

--查看变量的内容
DECLARE @age int;
DECLARE @firstname char(20),@lastname char(20);
SET @lastname='Forta';
SET @firstname='Ben';
SET @age =21
select @lastname,@firstname,@age;

--T-SQL也支持PRINT语句,用来显示消息以及返回的结果。
DECLARE @age int;                                       --结尾加分号可以使语句更加通用。可不加。
DECLARE @firstname char(20),@lastname char(20);
SET @age=21;
SET @Firstname='Forta';
SET @Lastname='Ben';
PRINT @firstname+','+@lastname;
PRINT @age;

--把变量转换为串如:把串age与变量@age构与一个串用拼接串和简单‘+’连接操作会失败。因为@age是一个数值而不是串,
--为解决此问题需把@age转换为一个串以使连接它如下:
DECLARE @age int;                                       --结尾加分号可以使语句更加通用。可不加。
DECLARE @firstname char(20),@lastname char(20);
SET @age=21;
SET @Firstname='Forta';
SET @Lastname='Ben';
PRINT rtrim(@firstname)+','+@lastname+'age:'+convert(char,@age);   --convert转换值,rtrim去掉右边的空格。

--在T-SQL语句中使用变量
SELECT cust_name,cust_email
FROM customers
WHERE cust_id=10001

SELECT order_num,order_date
FROM orders
WHERE cust_id=10001
ORDER BY order_date;

--以上两个语句都使用了CUST_ID两次,更好的办法是只定义一次而进行不同的搜索。
--Define @cust_id
DECLARE @cust_id int
SET @cust_id =10001

--get customer name and e.mail
SELECT cust_name,cust_email
FROM customers
WHERE cust_id=@cust_id

--get customer order history
SELECT order_num,order_date
FROM orders
WHERE cust_id=@cust_id
ORDER BY order_date

--使用条件处理
--下面是根据今天是否为周日,设置一个变量为0或1的一条简单的IF语句;
DECLARE @open bit
IF datepart(dw,getdate())=1
  SET @open =0
ELSE
  SET @open =1
SELECT @open as openforbusiness

--这个语句只判断星期天,要是加上星期六需要更加一个OR
--define variables
DECLARE @dow int
DECLARE @open bit
--get the day or week
SET @dow=datepart(dw,getdate())
--open for business today?
IF @dow=1 or @dow =7
  SET @open=0
ELSE
  SET @open=1
--output
select @open  openforbusiness;

--T-SQL在IF语句中支持AND和OR操作符,并且支持圆括号(用来定义计算的次序)。AND优先

SELECT datepart(dw,getdate());
select datename(dw,getdate());

--语句编组begin...end
--如果满足IF或ELSE条件,则处理单条语句,但必须处理多条语句的。
--input
--Define variables
DECLARE @dow int
DECLARE @open bit,@process bit
--get the day of week
SET @dow =datepart(dw,getdate())
--open for business today?
IF @dow=1 or @dow=7
  SET @open=0
  SET @process=0
ELSE
  SET @open=1
  SET @process=1
--output
SELECT @open openforbusiness,@process process;

--分析,如果执行此语句会产生一个错误,因为一旦处理IF,第一个SET或者忽略,不管怎么样,第二个SET总要执行。
--与IF处理无关,错误实际上由ELSE语句引起的,因为SQL Server认为它是一个与IF关联的ELSE
--要解决此问题需要加两个新的关键字,BEGIN和END
--input
--Define variables
DECLARE @dow int
DECLARE @open bit,@process bit
--get the day of week
SET @dow =datepart(dw,getdate())
--open for business today?
IF @dow=1 or @dow=7
BEGIN
  SET @open=0
  SET @process=0
END
ELSE
BEGIN
  SET @open=1
  SET @process=1
END
--output
SELECT @open openforbusiness,@process process;

--使用循环
/*SQL语句是顺序处理的,一次一条,每处理一次。与其它程序设计语言一样,
T-SQL支持循环,能够根据需要重复一个代码块,在T-SQL中,循环由WHILE语句完成
WHILE和游标,结合使用
*/
--input
DECLARE @counter int
SET @counter=1
WHILE @counter <=10
BEGIN
   PRINT @counter
   SET @counter=@counter+1
END
GO
--OUTPUT
--……

/*WHITH与IF一样,WHILE只重复跟在它后面的单条语句,为了重复多行语句可使用BEGIN...END

经常与WHITH结合使用的别外两条语句为:
BREAK立即退出当前WHILE循环(或IF)
CONTINUE在循环起始处重新开始处理。*/

阅读(1079) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~