create table #test (a int identity(1,1), b varchar(20), c varchar(20)) insert into #test (b,c) values ('bvju','hjab') insert into #test (b,c) values ('bst','sdfkg') ...... insert into #test (b,c) values ('hdsj','kfsd')
如何将#test.a上面插入语句中填充的标识值()插入#sample表(另一个表)中
#test.a
#sample
create table #sample (d int identity(1,1), e int, f varchar(20)) insert into #sample(e,f) values (identity value from #test table, 'jkhjk') insert into #sample(e,f) values (identity value from #test table, 'hfhfd') ...... insert into #sample(e,f) values (identity value from #test table, 'khyy')
任何人都可以解释一下如何对更大的记录集(成千上万条记录)实施此操作吗?
我们可以使用whileloop和scope_identity吗?如果是这样,请说明我们该怎么做?
while
scope_identity
如果我从选择查询中插入#test,会发生什么情况?
插入#test(b,c)中,从…中选择…(成千上万条记录)
我将如何捕获身份值并将该值用于另一个(#sample)插入#sample(e,f)插入select(来自#test的身份值),…来自....(成千上万条记录)’。
您可以使用该output子句。从文档(重点是我的):
output
OUTPUT子句从受INSERT,UPDATE,DELETE或MERGE语句影响的每一行返回信息或基于表达式的信息。这些结果可以返回给处理应用程序,以用于诸如确认消息,归档和其他此类应用程序需求之类的事情。 结果也可以插入到表或表变量中。 此外,您可以在嵌套的INSERT,UPDATE,DELETE或MERGE语句中捕获OUTPUT子句的结果,然后将这些结果插入目标表或视图中。
像这样:
create table #tempids (a int) -- a temp table for holding our identity values insert into #test (b,c) **output inserted.a into #tempids** -- put the inserted identity value into #tempids values ('bvju','hjab')
然后你问…
如果插入内容来自选择内容,该怎么办?
它的工作方式相同…
insert into #test (b,c) output inserted.a into #tempids -- put the inserted identity value into #tempids **select** -- except you use a select here **Column1 ,Column2 from SomeSource**
无论是从值插入,派生表,execute语句,dml表源还是默认值,其工作方式都相同。 如果您插入1000条记录,则会在中获得1000个ID#tempids。
#tempids