TSql Output 用法

第一部分: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
时间: 2024-09-30 00:15:27

TSql Output 用法的相关文章

TSQL Merge 用法

TSQL的Merge语句不仅能够同步数据,而且能够将更新的数据输出. 一,语法 1,when match子句要求Target表中一个数据行只能被更新一次 If UPDATE is specified in the <merge_matched> clause, and more than one row of <table_source>matches a row in target_table based on <merge_search_condition>, SQ

TSql Top 用法

第一部分:TSql Top 有两种用法 1,限制查询结果集返回的行数或总行数的百分比. 当将 TOP 与 ORDER BY 子句结合使用时,结果集限制为前 N 个已排序行:否则,以未定义的顺序返回前 N 个行. 2,限制 INSERT.UPDATE.MERGE 或 DELETE 语句影响的行数. 第二部分:讨论top的第二种用法 1,示例代码如下 create table dbo.FinanceMonth (MonthNum int , quantity int ) ;with cte as (

总结 output 用法

第一种用法 返回受 INSERT.UPDATE 或 DELETE 语句影响的每行的信息,或者返回基于上述每行的表达式.这些结果可以返回到处理应用程序, 以供在确认消息.存档以及其他类似的应用程序要求中使用.此外,也可以将结果插入表或表变量. 用于: DELETE INSERT UPDATE 语法: <OUTPUT_CLAUSE> ::={    [ OUTPUT <dml_select_list> INTO { @table_variable | output_table } [

sql server output用法说明

带有output的insert语句. @@identity只能返回当前会话最后生产的标识列.  如果一次性插入多条语句的话. 需要返回这些自动生产的标识列. 那么outpu就派上用场了. declare @temp table(k int, v nvarchar(200)) insert into t1(datacol) output inserted.keycol, inserted.datacol into @temp select * from @temp ----------------

TSql HASHBYTES 用法

HashBytes是比CheckSum精确度更高的函数,用法参考 checksum ,HashBytes 只能有一个输入参数,并且参数的数据类型是varchar.nvarchar 或 varbinary. 第一部分:MSDN上HashBytes的语法介绍如下 语法 HASHBYTES ( '<algorithm>', { @input | 'input' } ) <algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA

TSql sp_estimate_data_compression_savings 用法

1,sp_estimate_data_compression_savings 返回所请求对象的当前大小并估算对象在所请求的压缩状态下的大小,可对所有表或分区表评估压缩. 这包括堆.聚集索引.非聚集索引.索引视图以及表和索引分区. 可使用行压缩或页压缩来压缩这些对象.如果表.索引或分区已经过压缩,则可使用该过程来估计在重新压缩的情况下该表.索引或分区的大小. 语法 sp_estimate_data_compression_savings [ @schema_name = ] 'schema_nam

T-SQL:CTE用法(十)

CTE 也叫公用表表达式和派生类非常类似 先定义一个USACusts的CTE WITH USACusts AS ( SELECT custid, companyname FROM Sales.Customers WHERE country = N'USA' ) SELECT * FROM USACusts; with  ()  称为内部查询   与派生表相同,一旦外部查询完成后,CTE就自动释放了 CTE内部方式 就是上面代码所表示的方式  其实还有一种外部方式 WITH C(orderyear

说一下output子句

Output子句日常灰常有用,而且用的地方也挺多,但是确好多时候被我们忽视,今天我就也简单扫盲一下这个语句的用法. Output子句 返回受 INSERT.UPDATE.DELETE 或 MERGE 语句影响的各行中的信息,或返回基于受这些语句影响的各行的表达式. 这些结果可以返回到处理应用程序,以供在确认消息.存档以及其他类似的应用程序要求中使用. 也可以将这些结果插入表或表变量. 另外,您可以捕获嵌入的 INSERT.UPDATE.DELETE 或 MERGE 语句中 OUTPUT 子句的结

SQL Server特殊用法笔记

声明: 本文为转载,感谢原作者的辛勤付出. 原博客地址为:http://www.cnblogs.com/icyJ/p/SQL_Statement.html 1.MERGE用法:关联两表,有则改,无则加 create table #AAA(id int,A int,AA int,AAA int,B int) create table #BBB(A int,B int) insert into #AAA select 1,1,1,1,null union select 2,2,2,2,null un