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 语句的状态。
示例:
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 了。
类似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 语句的状态。
返回值 | 描述 |
---|---|
0 | FETCH 语句成功。 |
-1 | FETCH 语句失败或此行不在结果集中。 |
-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 了。
相关文章推荐
- 我收藏的Transact_SQL小手册,适合初学者
- Test Your Knowledge of Microsoft Visual Studio .NET
- Transact-SQL Optimization Tips ..from mssqlcity.com
- PHP Knowledge 8
- *******************Transact_SQL********************
- [转] transact---sql高级查询(下)
- Teddy's Knowledge Base--基于.Net 2.0 (C# 2.0, ASP.NET 2.0)的快速开发框架设计NBear V2.0.0 [开源]
- JavaScript ! Knowledge spot Ⅰ
- Transact-SQL编程规范(转)
- timestamp (Transact-SQL)
- Transact-SQL 参考 LIKE
- SUBSTRING (Transact-SQL)
- SQL SERVER2000教程-第七章 Transact-SQL编程 第四节 游标
- 資訊結構描述檢視 (Transact-SQL)
- sql server 2005 T-SQL 参考 *(乘)(Transact-SQL)
- sql server 2005 T-SQL @@CONNECTIONS (Transact-SQL)
- sql server 2005 T-SQL @@OPTIONS (Transact-SQL)
- sql server 2005 T-SQL @@VERSION (Transact-SQL)
- sql server 2005 T-SQL ALTER SCHEMA (Transact-SQL)
- sql server 2005 T-SQL CKUP MASTER KEY (Transact-SQL)