TSQL获取视图的ident_current,它使用连接

时间:2013-05-31 17:48:04

标签: tsql sql-server-2012 ssms

使用以下查询,我试图理解为什么我能够在一个视图上获取ident_current,而不是另一个视图。

以下是一些示例数据:

create table temptable1 (id int identity(1,1), name varchar(100), [type] int)
insert into temptable1 values 
( 'apple', 1),
( 'banana', 1),
( 'cake', 3)

create table temptable2 (id int identity(1,1), name varchar(100))
insert into temptable2 values 
( 'fruit'),
( 'vegetable'),
( 'pastry')

exec ('
create view dbo.identcurrentworks
as
select 
t1.id as t1id
,t1.name as t1name
,t1.type as t1type
 from temptable1 t1
')
--drop view dbo.identcurrentworks
exec ('
create view dbo.identcurrentdoesnotwork
as
select 
t1.id as t1id,
t1.name as t1name,
t1.type,
t2.id as t2id,
t2.name as t2name
from temptable1 t1
join temptable2 t2 on t1.type=t2.id
')
--drop view dbo.identcurrentdoesnotwork

select * from dbo.identcurrentworks
select IDENT_CURRENT('dbo.temptable1')
select IDENT_CURRENT('dbo.identcurrentworks')
select * from dbo.identcurrentdoesnotwork
select IDENT_CURRENT('dbo.temptable2')
select IDENT_CURRENT('dbo.identcurrentdoesnotwork')
--drop table temptable1
--drop table temptable2

我不确定为什么我可以在视图dbo.identcurrentworks上获取ident_current而不是另一方面。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

@Pondlife是对的 - 视图identcurrentdoesnotwork没有定义标识列,因为select语句中有两个标识列。您可以通过运行以下来验证这一点:

    sp_help identcurrentdoesnotwork

请注意,正如其他人指出的那样,在大多数情况下,应该使用SCOPE_IDENTITY代替IDENTITY_CURRENT

有关IDENT_CURRENT的更多信息,请点击here,有关@@IDENTITY vs IDENT_CURRENT vs SCOPE_IDENTITY的更多信息,请点击here