伙计们我有一个存储过程,只在最后插入的值不同时在表中插入一个新值。现在锁定整个表存储过程
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运行一次。 –