【发布时间】:2023-03-24 04:00:02
【问题描述】:
我正在尝试使用 MERGE 语句来更新表中的数据,并在该行不存在时插入数据。即使满足合并条件,插入的数据也有不正确的数据。
这些是必须插入的示例数据::
PrimaryFundName SsFundCode PortfolioName DataSourceName AssetClass SubAssetClass Strategy SubStrategy DataSourceFundName CodeRedFundName
Ventures 33EU Endowment SS_Private Edge Fixed Income Private Equity Venture Capital Growth Equity 137 Ventures III 137 Ventures III
Ventures 33EU Endowment SS_Accounting Equity Private Equity Venture Capital Growth Equity 137 VENTURES III LP 137 Ventures III
但是插入的数据在下面::
PrimaryFundName SsFundCode PortfolioName DataSourceName AssetClass SubAssetClass Strategy SubStrategy DataSourceFundName CodeRedFundName
Ventures 33EU Endowment SS_Private Perf Fixed Income Private Equity Venture Capital Growth Equity 137 Ventures III 137 Ventures III
Ventures 33EU Endowment SS_Accounting Equity Private Equity Venture Capital Growth Equity 137 VENTURES III 137 Ventures III
数据源和数据源基金名称不正确。以下是我的 MERGE 声明::
MERGE FundRel FR
USING #FundTemp Tmp
ON (FR.DataSourceFundName = Tmp.DataSourceFundName AND FR.PortFolioID =
Tmp.PortFolioID AND FR.DataSourceID = Tmp.DataSourceID)
WHEN MATCHED THEN
UPDATE SET FR.DataSourceFundName = Tmp.NewDataSourceFundName
, FR.CodeRedFundName = Tmp.NewCodeRedFundName
, FR.AssetClassID = Tmp.AssetClassID
, FR.SubAssetClassID = Tmp.SubAssetClassID
, FR.StrategyID = Tmp.StrategyID
, FR.SubStrategyID = Tmp.SubStrategyID
WHEN NOT MATCHED BY TARGET THEN
INSERT ([PortfolioID]
,[DataSourceID]
,[PrimaryFundID]
,[DataSourceFundName]
,[FundNumber]
,[AssetClassID]
,[SubAssetClassID]
,[StrategyID]
,[SubStrategyID]
,[CodeRedFundName])
VALUES (Tmp.[PortfolioID]
,Tmp.[DataSourceID]
,Tmp.[PrimaryFundID]
,Tmp.[DataSourceFundName]
,Tmp.FundCode
,Tmp.[AssetClassID]
,Tmp.[SubAssetClassID]
,Tmp.[StrategyID]
,Tmp.[SubStrategyID]
,Tmp.[CodeRedFundName]);
请告知我做错了什么。谢谢!
更新:我解决了这个问题。不正确的数据来自时髦的 JOIN。
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql sql-server-2012