考虑以下小脚本:
create table #test
(testId int identity
,testColumn varchar(50)
)
go
create table #testJunction
(testId int
,otherId int
)
insert into #test
select 'test data'
insert into #testJunction(testId,otherId)
select SCOPE_IDENTITY(),(select top 10 OtherId from OtherTable)
--The second query here signifies some business logic to resolve a many-to-many
--fails
然而,这将起作用:
insert into #test
select 'test data'
insert into #testJunction(otherId,testId)
select top 10 OtherId ,(select SCOPE_IDENTITY())
from OtherTable
--insert order of columns is switched in #testJunction
--SCOPE_IDENTITY() repeated for each OtherId
第二种解决方案有效,一切顺利。我知道这没关系,但为了连续性,我喜欢按照数据库表中列的顺序完成插入。我怎么能这样呢?以下尝试会出现subquery returned more than 1 value
错误
insert into #test
select 'test data'
insert into #testJunction(otherId,testId)
values ((select SCOPE_IDENTITY()),(select top 10 drugId from Drugs))
编辑: 在网页上,新行输入到具有类似
结构的表中 QuizId,StudentId,DateTaken
(QuizId is an identity column)
我有另一张表格,如
这样的测验问题QuestionId,Question,CorrectAnswer
任何数量的测验都可以包含任意数量的问题,因此在此示例中testJunction
解决了那么多的问题。因此,我需要重复SCOPE_IDENTITY,因为测验中有很多问题。
答案 0 :(得分:1)
您需要输出子句。在BOL中查找。
答案 1 :(得分:1)
尝试这种方式:
Declare @Var int
insert into #test
select 'test data'
select @var=scope_identity()
insert into #testJunction(otherId,testId)
select top 10 @var,drugId from Drugs
答案 2 :(得分:1)
失败的版本
insert into #testJunction(testId,otherId)
select SCOPE_IDENTITY(),(select top 10 OtherId from OtherTable)
将在第一列中插入一行scope_identity()
,在第二列中插入一组10个值。列不能有集合,以便失败。
有效的
insert into #testJunction(otherId,testId)
select top 10 OtherId ,(select SCOPE_IDENTITY())
from OtherTable
将在第一列中插入OtherTable
的10行,OtherId
,第二列中的标量值为scope_identity()
。
如果你需要切换列的位置,它将会是这样的。
insert into #testJunction(testId,otherId)
select top 10 SCOPE_IDENTITY(), OtherId
from OtherTable