我需要通过select语句将数据插入到两个不同的表中。这个select语句调用内联TVF。
到目前为止我所拥有的是:
INSERT INTO #Temp2 (RowNumber, ValFromUser, ColumnName, ValFromFunc, FuncWeight, percentage)
SELECT
RowNumber, @hospitalname, 'hospitalname',
PercentMatch, @constVal, PercentMatch * @constVal
FROM
dbo.Matchhospitalname (@hospitalname)
但是有些列需要提供给永久表dbo.Cache
。
在程序中多次调用上述查询。
Insert into dbo.Cache(StringSearched, ColName, RowId, PercentMatch)
select
ValFromUser, ColumnName, RowNumber, Max(ValFromFunc) as Percentage
from
#Temp2
group by
ValFromUser, ColumnName, RowNumber
如上所述,将数据分别添加到dbo.Cache
会使所有先前添加的值在执行此语句时添加多次,这当然是不可取的。
可能是因为根本不可能通过一个select向两个表添加数据,我们可以做一些事情,比如只添加那些只在最后一个insert语句中添加的行?
我可以就此获得一些指示吗?
编辑:根据建议,我尝试以这种方式使用OUTPUT INTO,但Group by似乎位于错误的位置。分组的行只能插入dbo.Cache
而不是#Temp2
我该如何解决这个问题?
INSERT INTO #Temp2 (RowNumber,ValFromUser,ColumnName,ValFromFunc,FuncWeight,percentage)OUTPUT
INSERTED.ValFromUser,
INSERTED.ColumnName,
INSERTED.RowNumber,
MAX(INSERTED.ValFromFunc)
INTO dbo.CACHE
(StringSearched, ColName, RowId, PercentMatch)
Group By Inserted.ValFromUser, Inserted.ColumnName, Inserted.RowNumber
SELECT RowNumber,@firstname,'firstname',PercentMatch,@constVal,PercentMatch * @constVal FROM dbo.MatchFirstName(@firstname)
答案 0 :(得分:1)
您可以通过输出子句执行此操作,或者通常可以在表上放置触发器。换句话说,您可以在临时表'#temp2'上创建一个后插入触发器。我从来没有在临时表上看过触发器,但它可能。每次重新创建临时表时,都必须重新创建触发器。请记住,#temp2只会在创建它的会话中存在(并且可见)。