码迷,mamicode.com
首页 > 数据库 > 详细

TSql Output 用法

时间:2015-06-03 21:21:01      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

第一部分:TSql Output 关键字有两种应用场景

1,作为存储过程的参数类型,从存储过程中返回数据

2,返回受 INSERT、UPDATE、DELETE 或 MERGE 语句影响的各行中的信息,可以捕获嵌入到 INSERT、UPDATE、DELETE 或 MERGE 语句中 OUTPUT 子句的结果,然后将这些结果插入目标表。

3,语法

<OUTPUT_CLAUSE> ::=
{
    [ OUTPUT <dml_select_list> INTO { @table_variable | output_table } [ ( column_list ) ] ]
    [ OUTPUT <dml_select_list> ]
}
<dml_select_list> ::=
{ <column_name> | scalar_expression } [ [AS] column_alias_identifier ]
    [ ,...n ]

<column_name> ::=
{ DELETED | INSERTED | from_table_name } . { * | column_name }
    | $action

--$action 仅可用于 MERGE 语句

注释:output 将结果输出到客户端,output into 将结果输出到指定的表中。在一次查询中,output 和ouput into 可以同时出现,但是最多出现一次。

详细信息,参见:https://msdn.microsoft.com/zh-cn/library/ms177564.aspx 

示例代码

create table dbo.FinanceMonth
(MonthNum int ,
quantity int
)

;with cte as
(
    select 1 as MonthNum,100 as quantity
    union all
    select MonthNum+1,quantity+100
    from cte
    where MonthNum<12
)
insert into dbo.FinanceMonth
select *
from cte

第二部分:Output作为数据类型

1,创建一个stored procedure

ALTER PROCEDURE [dbo].[usp_test]
    @RowCnt int output
AS
BEGIN
    SET NOCOUNT ON;

    select @RowCnt= count(*)
    from dbo.FinanceMonth
END

2,执行stored procedure

declare @RowNum int
exec dbo.usp_test @RowNum output
print @RowNum

第三部分:用于返回结果

1,返回delete的数据到临时表中,删除的数据临时存储在deleted系统表中,该表是只读的,作用域是语句级别的,只存在于该delete语句中。

if object_id(tempdb..#tempFiM) is not null
drop table #tempFiM

select top 0 *
into #tempFiM
from dbo.FinanceMonth


delete dbo.FinanceMonth 
output deleted.* 
into #tempFiM
where MonthNum<3

select * 
from #tempFiM

2,返回insert的数据到临时表中,增加的数据临时存储在inserted系统表中,该表是只读的,作用域是语句级别的,只存在于该inserted语句中。

if object_id(tempdb..#tempFiM) is not null
drop table #tempFiM

select top 0 *
into #tempFiM
from dbo.FinanceMonth


insert into dbo.FinanceMonth 
output inserted.* 
into #tempFiM
select *
from dbo.FinanceMonth 
where MonthNum<4

select * 
from #tempFiM

3,update语句对数据进行修改,修改之前的数据存储在临时表deleted中,修改之后的数据存储在临时表inserted中,使用output语句可以将系统表inserted或deleted中的数据输出,但是一条update语句最多使用一次 output into子句。

if object_id(tempdb..#tempFiM) is not null
drop table #tempFiM

select top 0 *
into #tempFiM
from dbo.FinanceMonth


update dbo.FinanceMonth set quantity=quantity+1 
output deleted.* 
into #tempFiM
output inserted.* 
where MonthNum<4


select * 
from #tempFiM

 

TSql Output 用法

标签:

原文地址:http://www.cnblogs.com/ljhdo/p/4550135.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!