MERGE语句插入不正确的数据TSQL

时间:2017-04-12 03:10:56

标签: sql sql-server sql-server-2008 tsql sql-server-2012

我正在尝试使用MERGE语句更新表中包含更改的数据,如果该行不存在则插入数据。即使满足合并条件,正在插入的数据也会包含不正确的数据。

这些是必须插入的示例数据::

writeHello

但插入的数据低于::

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

DataSource和Datasource Fund名称不正确。以下是我的MERGE声明::

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

请告诉我我做错了什么。谢谢!

更新:我遇到了这个问题。不正确的数据来自一个时髦的JOIN。

2 个答案:

答案 0 :(得分:2)

你的问题与合并

无关

我们怎么说,除非你没有提供表样本数据和结构等其他细节,否则你会得到错误的结果。

或者您可以像这样自己调试,

select tmp.*
from FundRel FR
inner join #FundTemp Tmp
 ON (FR.DataSourceFundName = Tmp.DataSourceFundName 
AND FR.PortFolioID = Tmp.PortFolioID 
AND FR.DataSourceID = Tmp.DataSourceID)

答案 1 :(得分:1)

仔细检查WHEN MATCHED块。 FR.CodeRedFundName = Tmp.NewCodeRedFundName列名称与您上面提供的示例数据不同。