T-SQL 语法


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
?
一,SQL变量
?局部变量必须以“@”开头,而且必须先用DECLARE命令说明后才可使用,在Transact-SQL中不能像在一般的程序语言中一样使用“变量=变量值”来给变量赋值。必须使用SELECT或SET命令来设定变量的值,其语法如下:
?? ?SELECT@局部变量=变量值?SET @局部变量=变量值
 declare@id char(10)  select@id=‘10010001’
在Select命令查询数据时,在Select命令中直接将列值赋给变量

?? ?declare@name char(30)@wage money
?? ??? ?select@name=e_name,@wage=e_wage
?? ??? ?from employee
?? ??? ?where emp_id=’10010001′
?? ??? ?select@name as e_name,@wage as e_wage

?? ?
?? ?全局变量:全局变量不是由用户的程序定义的,它们是在服务器级定应义的。只能使用预先说明及定义的变局变量。引用全局变量时,必须以“@@”开头。局部变量的名称不能与全局变量的名称相同、否则会在应用中出错。

二、SQL流程控制命令

?? 1,if

?? ?select @x=1,@y=2, @z=3

  if@x>@y

  print‘x>y’ –打印字符串’x>y’ ? /print 代表输出到控制台

  else if@y>@z

  print’y>z’

  else print’z>y’?

?? ?2,?BEGIN…END

?? ??? ?其语法如下:

  BEGIN

  <命令行或程序块>

  END

  BEGIN…END用来设定一个程序块,将在BEGIN…END内的所有程序视为一个单元执行BEGIN…END经常在条件语句,如IF…ELSE中使用。在BEGIN…END中可嵌套另外的BEGIN…END来定义另一程序块。

3 CASE

  CASE 命令有两种语句格式:

  CASE <运算式>

  WHEN <运算式>THEN<运算式>

  …

  WHEN<运算式>THEN<运算式>

  [ELSE<运算式>]

?se 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

4 WHILE…CONTINUE…BREAK

  其语法如下:

  WHILE <条件表达式>

  BEGIN

  <命令行或程序块>

  [BREAK]

  [CONTINUE]

  [命令行或程序块]

  END

  WHILE 命令在设定的条件成立时会重复执行命令行或程序块。CONTINUE命令可以让程序跳过CONTINUE 命令之后的语句,回到WHILE 循环的第一行命令。BREAK 命令则让程序完全跳出循环,结束WHILE 命令的执行。WHILE 语句也可以嵌套。

5,其它命令。

?(1)PRINT

  语法如下:

  PRINT ‘any ASCII text’ | @local_variable | @@FUNCTION | string_expression

  PRINT 命令向客户端返回一个用户自定义的信息,即显示一个字符串(最长为255个字符)、局部变量或全局变量。如果变量值不是字符串的话,必须先用数据类型转换函数CONVERT(),将其转换为字符串。其中,string_expression 是可返回一个字符串的表达式。表达式的长度可以超过8000 个字符,但超过8000 的字符将不会显示。

?(2)得到日期? SELECT GETDATE()??? SELECT CONVERT(varchar(100), GETDATE(), 20) : 2009-06-27 09:24:51

6,例子.

?遍历元素

DECLARE @vcum1 char(255)
DECLARE @vcum2 char(255)
DECLARE @vcum3 char(255)

DECLARE? cs1 CURSOR FOR SELECT * FROM city
OPEN cs1
FETCH cs1 INTO @vcum1, @vcum2,@vcum3
WHILE @@FETCH_STATUS = 0
BEGIN
?PRINT @vcum1
?FETCH NEXT FROM cs1 INTO @vcum1, @vcum2,@vcum3
?
END
CLOSE cs1
DEALLOCATE cs1注意:null是个非常特殊的值,什么值与null的运算结果都是null,常常导致语句错误。所以在设计库表结构时,常常设置default值,避免null的出现。但这样会增大数据文件的体积,浪费资源。当表中数值很稀疏时,这种浪费是非常惊人的。

判断是否等于null,不能用=null和<>null,要用 is null 和 is not null 。

设置字段值为null,可以用 update XX set YY=null。null外面不要加引号。

插入新记录用 insert XXX (YYY) values(null)。null外面不要加引号。

特别要注意null与”NULL”、”null”的区别。在SQL Server查询分析器中,null与”NULL”的显示完全相同,非常容易混淆!