0

下午所有,

我在网页上有一个按钮,当用户单击该按钮时,会将数据插入表格中。这个按钮有一个分配给它的消息框,让用户知道记录已经保存,然后将用户重定向到主页。这在其当前状态下工作得非常好。

我的问题是我希望找到一种解决方案来阻止用户返回此按钮所在的页面并再次插入数据。我需要绕过数据库表中的重复记录。

我假设从我在互联网上阅读的内容来看,我应该在我的存储过程中使用“IF EXISTS”函数。我不是 100% 确定这将如何与我存储过程中的当前代码一起工作?我只想检查这些记录是否可用,如果没有,则添加它们,或者如果它们已经存在,则不要添加它们。

我只是认为我对自己在互联网上阅读的文章数量等感到有些困惑。

这是我当前的存储过程:

ALTER PROCEDURE [dbo].[GasNominationsRawData_Insert]

AS SET NOCOUNT ON;  

INSERT INTO dbo.GasRawData (timestamp,TagName,Value) 

    SELECT timestamp AS Interval, Left(Right(TagName,Len(TagName)-5),Len(TagName)-10) As TagName,
    CONVERT(decimal(10, 2), ROUND(value, 2)) As Value
    FROM 
       OPENQUERY(IHISTORIAN,'
        SET starttime =''yesterday +4h'', endtime =''today +6h'' 
        SELECT timestamp, tagname, value
        FROM ihRawData
        WHERE tagname = "UMIS.99FC9051.F_CV"
           OR tagname = "UMIS.99F851C.F_CV"
           OR tagname = "UMIS.35GTGAS.F_CV"
           OR tagname = "UMIS.99XXG546.F_CV"
        AND timestamp BETWEEN ''timestamp'' and ''timestamp'' 
        AND SamplingMode =Calculated
        AND CalculationMode =Average
        AND IntervalMilliseconds =1h
        ORDER BY tagname, timestamp
        ')

任何帮助或建议将不胜感激。

问候贝蒂。

4

3 回答 3

1

防止重复的一种非常简单的方法是UNIQUE INDEX在要保持独特性的字段上添加一个。

CREATE UNIQUE INDEX ix_MyIndexName ON Table(Field1, Field2, Field3)

如果您尝试为列出的字段插入重复值,这将引发错误。

或者,IGNORE_DUP_KEY = ON如果尝试插入重复值,您可以在上面添加选项以继续。将生成警告,但不会导致查询失败。

这具有最小的开销,并且不需要您进行任何维护工作。

于 2011-10-28T13:21:59.790 回答
0

当您说“重复”时,您的意思是重复的TagName?如果是这样,最简单的解决方案是对表中的该字段使用唯一约束。或者您也可以使用AFTER INSERT触发器来检查它是否TagName已经存在(可能与VALUE? 的组合),如果存在则ROLLBACK交易。

于 2011-10-28T13:21:44.573 回答
0

我会做一个如果存在

基本上只是做

IF EXISTS( select * from wherever where something = something )
BEGIN
-- Return an error here
Return 0
END
ELSE
BEGIN
 -- Insert Code Goes Here
Return 1
END

然后,当您执行您的 SP 时,如果它返回 0,您就知道它出错了,您可以向您的用户显示一条有关插入重复数据的消息。这种方法意味着您可以检测查询的结果,如果由于重复而没有插入,您可以显示适当的消息,它还会确认记录已插入。

于 2011-10-28T14:17:03.773 回答