早上好,
我找到了我的问题的解决方案,但我认为无论如何我都会分享它,因为它可能对未来的项目/问题有用。我下面有一个简单的SQL表,它将是我更大的股票价格市场数据表的外键。
CREATE TABLE [StockMarket]
(
[ID] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[ReutersRIC] VARCHAR(50),
[BloombergTicker] VARCHAR(50),
[YahooSymbol] VARCHAR(50)
/* other irrelevant columns here*/
)
考虑到这一点,我正在尝试为结构添加健壮性,因为我将从不同的数据源添加。对于金融市场上的每个基础时间序列,根据您使用的数据提供者,有多个名称。我想避免让多行使用不同的数据源代表相同的时间序列。我需要一个触发器:
1)如果插入的值尚未在表中,则只需插入即可。
2)如果我插入一条已经存在至少[ReutersRIC],[BloombergTicker],[YahooSymbol],[ISIN]的行,我会更新该特定行。
2.1)更新应仅在非空主菜上进行
我的问题是如何以最佳方式实现这一目标?我花了一些时间,但我想分享下面的答案以供将来参考。
答案 0 :(得分:0)
这是我的解决方案:
CREATE TRIGGER UniqueStockMarketInserts ON [dbo].[StockMarket]
INSTEAD OF INSERT
AS
BEGIN
DECLARE @StockId int
SELECT @StockId = S.ID
FROM [StockMarket] S INNER JOIN [INSERTED] I
ON
S.YahooSymbol = I.YahooSymbol OR
S.ReutersRIC = I.ReutersRIC OR
S.BloombergTicker = I.BloombergTicker OR
S.ISIN = I.ISIN
IF @StockId IS NULL
BEGIN
INSERT INTO [StockMarket] (YahooSymbol,ReutersRIC,BloombergTicker,ISIN)
SELECT I.YahooSymbol, I.ReutersRIC, I.BloombergTicker, I.ISIN
FROM [INSERTED] I
END
ELSE
BEGIN
UPDATE S SET
S.ISIN = ISNULL(S.ISIN,I.ISIN),
S.YahooSymbol = ISNULL(S.YahooSymbol,I.YahooSymbol),
S.ReutersRIC = ISNULL(S.ReutersRIC,I.ReutersRIC),
S.BloombergTicker = ISNULL(S.BloombergTicker,I.BloombergTicker)
FROM INSERTED I, StockMarket S
WHERE S.ID = @StockId
END
END
GO
以下是我使用现实生活中的例子进行的测试(除了我编写的ISIN):
/*-----------TESTING THE TRIGGER--------*/
INSERT INTO StockMarket (ReutersRIC, BloombergTicker) VALUES ('G.TO', 'GG US Equity');
INSERT INTO StockMarket (YahooSymbol, BloombergTicker, ISIN) VALUES ('GOOG', 'GOOG US Equity','US123454321');
INSERT INTO StockMarket (YahooSymbol, ISIN) VALUES ('RDSA','NL111112222')
INSERT INTO StockMarket (YahooSymbol, ReutersRIC) VALUES ('GG', 'G.TO'); /*this should update as per trigger*/
INSERT INTO StockMarket (ReutersRIC, ISIN) Values ('GOOG.OQ','US123454321'); /*this should update as per trigger*/
INSERT INTO StockMarket (YahooSymbol, ReutersRIC) Values ('RDSA', 'RDSa.L'); /*this should update as per trigger*/
结果:
希望这可以在将来帮助某人。快乐的编码