Transact-SQL 存储过程 knowledge Note I

本文介绍了Transact-SQL的基础语法,包括语句块、条件判断、循环结构、打印输出等,并详细讲解了如何使用游标进行数据处理,以及获取执行结果的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Transact-SQL 一些语法:

类似pascal 但有些区别:

语句块:

begin

end

 

if语句:

if (Boolean)           //没有 Then

begin

end                       //没有结束符;

else

begin

end

 

while 循环

while(Boolean)

begin

end

 

打印输出:

print @value

 

 

 

执行字符串变量的语句

1,EXECUTE(@SqlQuery)

2,调用存储过程sp_executesql 

  set @SqlCount = 'select @RecordSum = count(*) from ' + @Table + ' ' + @Where   

  exec sp_executesql @SqlCount, N'@RecordSum int output', @RecordSum output     

 

获取Transact-SQL  语句影响的行数的信息。

@@rowcount

在设置Set   Nocount   on  之后,系统常量@@rowcount不会被影响.

 

使用游标变量

声明:declare @sql varchar(100)

赋值:set @sql ='select ..'

 

使用游标保存结果集:

游标作用:对select筛选出的结果集进行逐行、遍历、多行操作。

用法

1,声明 declare 游标名 cursor for select(语句) --这是只进游标,只能使用fetch next操作

        declare 游标名 SCROLL cursor for select(语句)--这是滚动游标,可以随意操作
2,打开 open 游标名

3,滚动游标使用
   fetch next from 游标名 into 变量名//下一
   fetch prior from 游标名 into 变量名 //前一
   fetch first from 游标名 into 变量名 //第一
   fetch prior from 游标名 into 变量名 //前一
   fetch absolute n from 游标名 into 变量名 //第n行
   fetch relative n from 游标名 into 变量名 //相对当前行第n行

 

   只进的游标只支持--fetch next from

4,关闭游标 close 游标名称

5,释放游标 deallocate 游标名称

 

@@Fetch_Status

返回针对连接当前打开的任何游标发出的上一条游标 FETCH 语句的状态。

返回值描述
0FETCH 语句成功。
-1FETCH 语句失败或此行不在结果集中。
-2被提取的行不存在。
 

示例:

DECLARE @result int

DECLARE cursor_name  FOR select value,* from test

open cursor_name    

FETCH   NEXT   FROM   Declaretest into @result 
while @@FETCH_STATUS=0
begin
   print @result

   FETCH   NEXT   FROM   Declaretest into @result 
end
Close Declaretest
Deallocate Declaretest

游标其他应用:

修改当前游标所在行的用户的余额,我们可以如下操作:
UPDATE customer
SET balance=1000
WHERE CURRENT of customerCursor;

 

删除当前行的操作如下:
DELETE FROM Customer
WHERE CURRENT OF CustomerCursor;

 

动态游标的应用(游标的执行语句是动态的)

declare @text varchar(1000)

declare @sql varchar(1000)
set @text='declare aa cursor for '+@bb
EXEC(@text);
--然后再打开cursor,再使用。

 

T-SQL 字符串前加 N 是什么意思

 N 在这里表示 Unicode,就是双字节字符。对于西文字符,用一个字节来存储过足够了,对于东方文字字符,就需要两个字节来存储。Unicode 为了统一、规范、方便、兼容,就规定西文字符也用两个字节来存储。
也就是说加 N 就表示字符串用 Unicode 方式存储。
但有时候加与不加都一样,又是什么原因呢?这是由于自动转换造成的。
比如:
declare @status nvarchar(20)
select @status = N'stopped'
select @status = 'stopped'
实际上上述两句赋值的结果是一样的,因为变量类型就是 nvarchar(Unicode 类型)。
而有些地方(比如:sp_executesql 的参数)不能自动转换,所以需要加 N 了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值