您的位置:首页 > 数据库

Transact-SQL 存储过程 knowledge Note I

2010-11-27 14:26 162 查看
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 了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: