夥計們我有一個存儲過程,只在最後插入的值不同時在表中插入一個新值。現在鎖定整個表存儲過程
CREATE PROCEDURE [dbo].[PutData]
@date datetime,
@value float
AS
IF NOT EXISTS(SELECT * FROM Sensor1 WHERE SensorTime <= @date AND SensorTime = (SELECT MAX(SensorTime) FROM Sensor1) AND SensorValue = @value)
INSERT INTO Sensor1 (SensorTime, SensorValue) VALUES (@date, @value)
RETURN 0
,因爲我在做這個高頻率(比如每10ms),該IF NOT EXISTS (SELECT)
語句經常變老的數據,正因爲如此我得到的重複數據。是否可以在存儲過程中鎖定整個表,以確保SELECT
語句始終接收最新數據?
你能描述你實際上想要做什麼嗎?我認爲問題出在你的設計上。鎖定桌面將會產生問題,因爲隨後對SP的其他調用將等待桌子解鎖。 – 2014-03-27 08:17:24
嗨,這個SO問題有一些相關http://stackoverflow.com/questions/21086201/fill-in-missing-values我有一個表2列,datetime(與PK)和一個浮點數(它保存的值) 。系統正在監視一臺機器,並且每〜10ms接收一個日期時間的數據,並且它應該被插入到表中。爲了節省存儲空間,計劃只在與最後插入的值不同時插入值。所以表格結果應該看起來像我上面鏈接的SO問題。 – user3182508
您應該無條件地將它們添加到不同的隊列表中(即始終),然後使用過程將它們間隔移動到實際表中,然後可能不必每10ms運行一次。 –