0

次のクエリを使用して、1 つのビューで 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 を取得できるのに、他のビューでは取得できない理由がわかりません。何か案は?

4

1 に答える 1

0

@Pondlife は正しいです。selectidentcurrentdoesnotworkステートメントに 2 つの ID 列があるため、ビューには ID 列が定義されていません。これを確認するには、次を実行します。

    sp_help identcurrentdoesnotwork

他の人が指摘しているように、ほとんどの状況では、のSCOPE_IDENTITY代わりに使用する必要があることに注意してくださいIDENTITY_CURRENT

詳細についてはIDENT_CURRENT、ここをクリックしてください。vs vs@@IDENTITYの詳細については、ここをクリックしてくださいIDENT_CURRENTSCOPE_IDENTITY

于 2013-06-01T09:37:36.393 に答える