我在C#应用程序上使用sql,而我的表包含股票报价。我关注的列称为符号和日期。我想要做的是,如果符号和日期已存在于单独的行中,则限制一行添加到表中。
例如,如果我已经为GOOG和今天的日期排了一行,那么如果我尝试添加具有该匹配信息的行,那么它将被拒绝或使用新信息更新现有行。最简单的方法是什么?
答案 0 :(得分:2)
查看MERGE
声明。
MERGE INTO dbo.StockDailyData AS Target
USING (VALUES ('<your id value>', '<symbol>', '<Market>', '<Open>',
'<High>', '<Low>', '<Close>', '<Volume>', '<AdjustedClose>', '<Date>')
AS Source (ID, Symbol, Market, Open, High, Low, Close, Volume, AdjustedClose, Date)
ON Target.Symbol = Source.Symbol AND Target.Date = Source.Date
WHEN MATCHED THEN
UPDATE SET Target.Market = Source.Market,
Target.High = Source.High,
Target.Low = Source.Low,
Target.Close = Source.Close,
Target.Volume = Source.Volume,
Target.AdjustedClose = Source.AdjustedClose,
WHEN NOT MATCHED BY TARGET THEN
INSERT (ID, Symbol, Market, Open, High, Low, Close, Volume, AdjustedClose, Date)
VALUES (Source.ID, Source.Symbol, Source.Market, Source.Open,
Source.High, Source.Low, Source.Close, Source.Volume,
Source.AdjustedClose, Source.Date
通过使用MERGE
,您可以设置逻辑,以便在记录已存在时执行操作 - 在您的情况下,您将更新新的报价信息。
答案 1 :(得分:1)
您可以使用sql triggers进行预插入。查看Trigger to fire only if a condition is met in SQL Server。