34,873
社区成员
发帖
与我相关
我的任务
分享declare @banlance int;
update table1
set @banlance = banlance+10, banlance = @banlance
where id=1;
select @banlance;update test1 set banlance+10 where id=1
begin tran aa
declare @dCur money --- 当前值
set @dCur = 0
select @dCur = banlance + 10 from test1
update test1 set
banlance= @dCur
where id=1
select @dCur
commit tran aa
<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
参数
@table_variable
指定一个 table 变量,返回的行将插入此变量,而不是返回给调用方。@ table_variable 必须在 INSERT、UPDATE、DELETE 或 MERGE 语句前声明。
如果未指定 column_list,则 table 变量必须与 OUTPUT 结果集具有相同的列数。标识列和计算列除外,这两种列必须跳过。如果指定了 column_list,则任何省略的列都必须允许 Null 值,或者都分配有默认值。
有关 table 变量的详细信息,请参阅 表 (Transact-SQL)。
output_table
指定一个表,返回的行将被插入该表中而不是返回到调用方。output_table 可以为临时表。
如果未指定 column_list,则表必须与 OUTPUT 结果集具有相同的列数。标识列和计算列例外,必须跳过这两种列。如果指定了 column_list,则任何省略的列都必须允许 Null 值,或者都分配有默认值。
output_table 无法应用于以下情况:
具有启用的对其定义的触发器。
参与 FOREIGN KEY 约束的任意一方。
具有 CHECK 约束或启用的规则。
column_list
INTO 子句目标表上列名的可选列表。它类似于 INSERT 语句中允许使用的列列表。
scalar_expression
可取计算结果为单个值的任何符号和运算符的组合。scalar_expression 中不允许使用聚合函数。
对修改的表中的列的任何引用都必须使用 INSERTED 或 DELETED 前缀限定。
column_alias_identifier
用于引用列名的代替名称。
DELETED
指定由更新或删除操作删除的值的列前缀。以 DELETED 为前缀的列反映了 UPDATE、DELETE 或 MERGE 语句完成之前的值。
不能在 INSERT 语句中同时使用 DELETED 与 OUTPUT 子句。
INSERTED
列的前缀,指定由插入操作或更新操作添加的值。以 INSERTED 为前缀的列反映了在 UPDATE、INSERT 或 MERGE 语句完成之后但在触发器执行之前的值。
INSERTED 语句不能与 DELETE 语句的 OUTPUT 子句同时使用。
from_table_name
是一个列前缀,指定 DELETE、UPDATE 或 MERGE 语句(用于指定要更新或删除的行)的 FROM 子句中包含的表。
如果还在 FROM 子句中指定了要修改的表,则对该表中的列的任何引用都必须使用 INSERTED 或 DELETED 前缀限定。
*
指定受删除、插入或更新操作影响的所有列都将按照它们在表中的顺序返回。
例如,以下 DELETE 语句中的 OUTPUT DELETED.* 将返回 ShoppingCartItem 表中所有已删除的列:
复制代码
DELETE Sales.ShoppingCartItem
OUTPUT DELETED.*;
column_name
显式列引用。对要修改的表的任何引用都必须根据需要使用 INSERTED 或 DELETED 前缀加以正确限定,例如:INSERTED.column_name。
$action
仅可用于 MERGE 语句。在 MERGE 语句的 OUTPUT 子句中指定一个 nvarchar(10) 类型的列,该子句为每行返回以下三个值之一:'INSERT'、'UPDATE' 或 'DELETE',返回哪个值取决于对该行执行的操作。
--更新操作
update test1 set banlance=banlance+10 where id=1
--查询
select banlance From test1 where id = 1if object_id('[test1]') is not null drop table [test1]
go
create table [test1]([id] int,[name] varchar(4),[balance] int)
insert [test1]
select 1,'xixi',100 union all
select 2,'haha',300 union all
select 3,'hoho',120
go
--select * from [test1]
declare @t table(b int)
update test1
set balance=balance+10
output inserted.balance
into @t
where id=1
select * from @t
/*
b
-----------
110
*/