SQL记录(如果记录尚不存在)

时间:2018-11-29 00:30:58

标签: sql sql-server insert

我正在尝试执行和INSERT语句,就像在这里找到的语句:docs.microsoft

我的sql语句如下:

INSERT INTO dbo.Table1([Name], [Value], [Period], [As of Date])
    VALUES ('Cust Index', -10.75468724987, '1M', '2018-10-31')
    SELECT 'Cust Index', -10.75468724987, '1M', '2018-10-31' 
        WHERE NOT EXISTS (SELECT [Name], [Period], [As of Date] FROM Table1
                            WHERE [Name] = 'Cust Index' AND [Period] = '1M' )

我无法弄清楚我在做什么错,因为即使值存在,这仍然会更新table1。我从比较中排除了[Value]字段,因为每次运行函数时都会重新计算该字段,并且我想确保它不会插入到表中只是因为它的位置保留了两位小数。

也许答案很简单,我只需要再看看第二眼就可以看到我的sql语句,因为到目前为止,我一直处于困境。

1 个答案:

答案 0 :(得分:1)

尝试此版本:

INSERT INTO dbo.Table1([Name], [Value], [Period], [As of Date])
    SELECT v.*
    FROM (VALUES ('Cust Index', -10.75468724987, '1M', '2018-10-31')
         ) v(Name, Value, Period, AsOfDate)
    WHERE NOT EXISTS (SELECT 1
                      FROM Table1 t1
                      WHERE t1.Name = v.name AND t1.Period = v.Period
                     );

这避免了所有列值的重复。

请注意,确保数据不重复的最佳方法是使用唯一约束或索引:

create unique index unq_table1_name_period on table1(name, period);