在sql中创建自定义约束

时间:2014-04-26 01:05:48

标签: c# sql sql-server

我在C#应用程序上使用sql,而我的表包含股票报价。我关注的列称为符号和日期。我想要做的是,如果符号和日期已存在于单独的行中,则限制一行添加到表中。

例如,如果我已经为GOOG和今天的日期排了一行,那么如果我尝试添加具有该匹配信息的行,那么它将被拒绝或使用新信息更新现有行。最简单的方法是什么?

2 个答案:

答案 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