【发布时间】:2014-05-28 19:37:35
【问题描述】:
是否可以在更新语句中嵌套插入语句?
背景:
我第一次使用merge 子句来转换一些数据。也就是说,我有一个包含许多列的单一源表,但如果缺少更好的词,我需要 转换 到更结构化的模型/模式;类似于BI 模型。我在 BI 建模方面也缺乏经验(现在才开始阅读它不到一个月)。任何帮助都会很大
赞赏。
我很乐意提供可能需要帮助的任何其他信息。
错误:
消息 156,第 15 级,状态 1,第 47 行
关键字“select”附近的语法不正确。消息 102,第 15 级,状态 1,第 48 行
')' 附近的语法不正确。
这些是在我尝试执行 insert into tertiary.WEBADDRESS 行时抛出的。
代码:
--Transform operation
--web address dimension insert
use UniversityUS
merge tertiary.INSTITUTION as target
using(
select UNITID,
INSTNM,
ADDR,
CITY,
STABBR,
ZIP,
OBEREG,
WEBADDR,
ADMINURL,
FAIDURL,
APPLURL,
HLOFFER,
GENTELE,
LOCALE,
CARNEGIE,
FAXTELE,
IALIAS,
F1SYSNAM,
COUNTYNM,
LONGITUD,
LATITUDE
--geography::Point(LATITUDE,LONGITUD,4326)) as [LOCATION]
from staging.secondary_university
where closedat = -2
) as source
on ( source.UNITID = target.ROWSOURCECONTROLID )
when not matched by target then
--this would represent my fact table
insert (INSTNM,IALIAS,GENTELE,F1SYSNAM,ROWSOURCECONTROLID)
values (source.INSTNM,source.IALIAS,source.GENTELE,source.F1SYSNAM,source.UNITID)
when matched then
update set target._WEBADDRID =
(
select wa.wid
from
(
--this would represent one of my many dimension tables
--if i comment the next two lines it works
--but i need to know how will these be updated.
insert into tertiary.WEBADDRESS
values(source.WEBADDR,source.ADMINURL,source.FAIDURL,source.APPLURL)
select scope_identity() as wid
)wa
)
when not matched by source then
delete
output $action;
【问题讨论】:
-
@AaronBertrand - 现在我正在努力找出如何进行转换(BI 的新手)?哈哈....很高兴你早早地向我指出了这一点。我注意到的一件事是它没有将所有行都插入到新表中。我不完全确定这个问题,但同时会考虑分离陈述。谢谢。
标签: sql-server-2008 tsql sql-merge