我正在尝试执行和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语句,因为到目前为止,我一直处于困境。
答案 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);