DECLARE @id int;INSERT
INTO [testtable]
([name])
output inserted.id --into @temptable 只能用插入临时表的方法获取值吗?
VALUES
('test')
使用output 只能用 into @temptable的方式取值吗?
可不可以直接赋值给 @id?
解决方案 »
- 如何从mssql随机取出一条记录,看似很简单的问题
- 简单sql取数问题
- 这样的动态交叉如何写,难
- 日志中不停地“starting up datbase "db1"”,请问是什么原因?
- 一个存储过程插入临时表 另一个存储过程 查询临时表
- 求一动态sql文返回值的写法
- 数据库选择了完全备份,日志选择的是 删除事务日志中不活动的条目,我想利用Log explorer 恢复备份前的一步,是不是没救了
- 不是我懒。实在是想不出了。帮忙看看这段查询怎么写,谢谢大家了。
- 这种现象是SQL2000的问题还是网络的问题呢?
- 急!!!奇怪的数据检索问题,请各位大侠帮忙看看……
- SQL 复制脚本
- sql表中有一分号列,如何统计这列中没行分号的个数
create proc test(@sm varchar(100) output)
as
begin
set @sm='这个是返回值!'
end
exec test @sm=''
set @sm='这个是返回值!'
select @sm as sm
不是存储过程的output
以下示例将行插入 ScrapReason 表,并使用 OUTPUT 子句将语句的结果返回到 @MyTableVar table 变量。由于 ScrapReasonID 列使用 IDENTITY 属性定义,因此未在 INSERT 语句中为该列指定一个值。但应注意,数据库引擎为该列生成的值在 INSERTED.ScrapReasonID 列中的 OUTPUT 子句中返回。
USE AdventureWorks;
GO
DECLARE @MyTableVar table( ScrapReasonID smallint,
Name varchar(50),
ModifiedDate datetime);
INSERT Production.ScrapReason
OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, INSERTED.ModifiedDate
INTO @MyTableVar
VALUES (N'Operator error', GETDATE());--Display the result set of the table variable.
SELECT ScrapReasonID, Name, ModifiedDate FROM @MyTableVar;
--Display the result set of the table.
SELECT ScrapReasonID, Name, ModifiedDate
FROM Production.ScrapReason;
GO
我问的是可不可以把output的值直接给变量,而不是给表
我代码应该写的有
先使用output into @temptable
再:select top 1 @id=id from @temptable
先定义一个变变量
declare @tb table(id int)然后类似下面的
delete from test2 output deleted.id into @tbwhere [no]=1update test2 set n='ccc' output
inserted.no into @tb
where [no]=3select * from @tb
多个表同时改动的话,@@identity只返回最后一个成功的id。用的时候有危险
select @id=@@identity 就可以了
即使output inserted.id into .. 只指定了一个id字段,但MSSQL依然需要以表的方式传,因为这里可以写多个字段(如output inserted.*),且可能是多行的,靠一个变量是无法存储的.
而表的方式存储是通用的.
declare @id int
declare @temptable table(id int)INSERT INTO [testtable]([name])
output inserted.id into @temptable
values('test')select @id=id from @temptableselect @id 'id'
drop table t
go
create table t(vid int not null,pic varchar(10) not null)insert into t
values(1,'abc'),
(2,'def'),
(3,'hjkl')--declare @temp table(vid int,pic varchar(10))declare @i int
declare @pic varchar(10)delete from t
output deleted.vid, --引用所有字段deleted.*
deleted.pic into @i,@pic
where vid < 100
/*
消息 102,级别 15,状态 1,第 22 行
',' 附近有语法错误。
*/